diff options
Diffstat (limited to 'indra/newview/llsechandler_basic.h')
-rw-r--r-- | indra/newview/llsechandler_basic.h | 504 |
1 files changed, 252 insertions, 252 deletions
diff --git a/indra/newview/llsechandler_basic.h b/indra/newview/llsechandler_basic.h index bd1a8f640c..b4108d0c0e 100644 --- a/indra/newview/llsechandler_basic.h +++ b/indra/newview/llsechandler_basic.h @@ -1,4 +1,4 @@ -/** +/** * @file llsechandler_basic.h * @brief Security API for services such as certificate handling * secure local storage, etc. @@ -6,21 +6,21 @@ * $LicenseInfo:firstyear=2009&license=viewerlgpl$ * Second Life Viewer Source Code * Copyright (C) 2010, Linden Research, Inc. - * + * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License only. - * + * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. - * + * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * + * * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ @@ -41,35 +41,35 @@ extern std::string cert_get_digest(const std::string& digest_type, X509 *cert); // class LLCertificate -// +// class LLBasicCertificate : public LLCertificate { -public: - LOG_CLASS(LLBasicCertificate); +public: + LOG_CLASS(LLBasicCertificate); // The optional validation_params allow us to make the unit test time-invariant - LLBasicCertificate(const std::string& pem_cert, const LLSD* validation_params = NULL); - LLBasicCertificate(X509* openSSLX509, const LLSD* validation_params = NULL); - - virtual ~LLBasicCertificate(); - - virtual std::string getPem() const; - virtual std::vector<U8> getBinary() const; - virtual void getLLSD(LLSD &llsd); - - virtual X509* getOpenSSLX509() const; - - // set llsd elements for testing - void setLLSD(const std::string name, const LLSD& value) { mLLSDInfo[name] = value; } + LLBasicCertificate(const std::string& pem_cert, const LLSD* validation_params = NULL); + LLBasicCertificate(X509* openSSLX509, const LLSD* validation_params = NULL); + + virtual ~LLBasicCertificate(); + + virtual std::string getPem() const; + virtual std::vector<U8> getBinary() const; + virtual void getLLSD(LLSD &llsd); + + virtual X509* getOpenSSLX509() const; + + // set llsd elements for testing + void setLLSD(const std::string name, const LLSD& value) { mLLSDInfo[name] = value; } protected: - // certificates are stored as X509 objects, as validation and - // other functionality is via openssl - X509* mCert; - - LLSD& _initLLSD(); - LLSD mLLSDInfo; + // certificates are stored as X509 objects, as validation and + // other functionality is via openssl + X509* mCert; + + LLSD& _initLLSD(); + LLSD mLLSDInfo; }; @@ -78,79 +78,79 @@ protected: // This implementation uses a stl vector of certificates. class LLBasicCertificateVector : virtual public LLCertificateVector { - + public: - LLBasicCertificateVector() {} - - virtual ~LLBasicCertificateVector() {} - - // Implementation of the basic iterator implementation. - // The implementation uses a vector iterator derived from - // the vector in the LLBasicCertificateVector class - class BasicIteratorImpl : public iterator_impl - { - public: - BasicIteratorImpl(std::vector<LLPointer<LLCertificate> >::iterator _iter) { mIter = _iter;} - virtual ~BasicIteratorImpl() {}; - // seek forward or back. Used by the operator++/operator-- implementations - virtual void seek(bool incr) - { - if(incr) - { - mIter++; - } - else - { - mIter--; - } - } - // create a copy of the iterator implementation class, used by the iterator copy constructor - virtual LLPointer<iterator_impl> clone() const - { - return new BasicIteratorImpl(mIter); - } - - virtual bool equals(const LLPointer<iterator_impl>& _iter) const - { - const BasicIteratorImpl *rhs_iter = dynamic_cast<const BasicIteratorImpl *>(_iter.get()); - llassert(rhs_iter); - if (!rhs_iter) return 0; - return (mIter == rhs_iter->mIter); - } - virtual LLPointer<LLCertificate> get() - { - return *mIter; - } - protected: - friend class LLBasicCertificateVector; - std::vector<LLPointer<LLCertificate> >::iterator mIter; - }; - - // numeric index of the vector - virtual LLPointer<LLCertificate> operator[](int _index) { return mCerts[_index];} - - // Iteration - virtual iterator begin() { return iterator(new BasicIteratorImpl(mCerts.begin())); } - - virtual iterator end() { return iterator(new BasicIteratorImpl(mCerts.end())); } - - // find a cert given params - virtual iterator find(const LLSD& params); - - // return the number of certs in the store - virtual int size() const { return mCerts.size(); } - - // insert the cert to the store. if a copy of the cert already exists in the store, it is removed first - virtual void add(LLPointer<LLCertificate> cert) { insert(end(), cert); } - - // insert the cert to the store. if a copy of the cert already exists in the store, it is removed first - virtual void insert(iterator _iter, LLPointer<LLCertificate> cert); - - // remove a certificate from the store - virtual LLPointer<LLCertificate> erase(iterator _iter); - + LLBasicCertificateVector() {} + + virtual ~LLBasicCertificateVector() {} + + // Implementation of the basic iterator implementation. + // The implementation uses a vector iterator derived from + // the vector in the LLBasicCertificateVector class + class BasicIteratorImpl : public iterator_impl + { + public: + BasicIteratorImpl(std::vector<LLPointer<LLCertificate> >::iterator _iter) { mIter = _iter;} + virtual ~BasicIteratorImpl() {}; + // seek forward or back. Used by the operator++/operator-- implementations + virtual void seek(bool incr) + { + if(incr) + { + mIter++; + } + else + { + mIter--; + } + } + // create a copy of the iterator implementation class, used by the iterator copy constructor + virtual LLPointer<iterator_impl> clone() const + { + return new BasicIteratorImpl(mIter); + } + + virtual bool equals(const LLPointer<iterator_impl>& _iter) const + { + const BasicIteratorImpl *rhs_iter = dynamic_cast<const BasicIteratorImpl *>(_iter.get()); + llassert(rhs_iter); + if (!rhs_iter) return 0; + return (mIter == rhs_iter->mIter); + } + virtual LLPointer<LLCertificate> get() + { + return *mIter; + } + protected: + friend class LLBasicCertificateVector; + std::vector<LLPointer<LLCertificate> >::iterator mIter; + }; + + // numeric index of the vector + virtual LLPointer<LLCertificate> operator[](int _index) { return mCerts[_index];} + + // Iteration + virtual iterator begin() { return iterator(new BasicIteratorImpl(mCerts.begin())); } + + virtual iterator end() { return iterator(new BasicIteratorImpl(mCerts.end())); } + + // find a cert given params + virtual iterator find(const LLSD& params); + + // return the number of certs in the store + virtual int size() const { return mCerts.size(); } + + // insert the cert to the store. if a copy of the cert already exists in the store, it is removed first + virtual void add(LLPointer<LLCertificate> cert) { insert(end(), cert); } + + // insert the cert to the store. if a copy of the cert already exists in the store, it is removed first + virtual void insert(iterator _iter, LLPointer<LLCertificate> cert); + + // remove a certificate from the store + virtual LLPointer<LLCertificate> erase(iterator _iter); + protected: - std::vector<LLPointer<LLCertificate> >mCerts; + std::vector<LLPointer<LLCertificate> >mCerts; }; // class LLCertificateStore @@ -161,49 +161,49 @@ protected: class LLBasicCertificateStore : virtual public LLBasicCertificateVector, public LLCertificateStore { public: - LLBasicCertificateStore(const std::string& filename); - void load_from_file(const std::string& filename); - - virtual ~LLBasicCertificateStore(); - - // persist the store - virtual void save(); - - // return the store id - virtual std::string storeId() const; - - // validate a certificate chain against a certificate store, using the - // given validation policy. - virtual void validate(int validation_policy, - LLPointer<LLCertificateChain> ca_chain, - const LLSD& validation_params); - - // Clears cache of certs validated agains store - virtual void clearSertCache() { mTrustedCertCache.clear(); } + LLBasicCertificateStore(const std::string& filename); + void load_from_file(const std::string& filename); + + virtual ~LLBasicCertificateStore(); + + // persist the store + virtual void save(); + + // return the store id + virtual std::string storeId() const; + + // validate a certificate chain against a certificate store, using the + // given validation policy. + virtual void validate(int validation_policy, + LLPointer<LLCertificateChain> ca_chain, + const LLSD& validation_params); + + // Clears cache of certs validated agains store + virtual void clearSertCache() { mTrustedCertCache.clear(); } protected: - std::vector<LLPointer<LLCertificate> > mCerts; - - // cache of cert sha1 hashes to from/to date pairs, to improve - // performance of cert trust. Note, these are not the CA certs, - // but the certs that have been validated against this store. - typedef std::map<std::string, std::pair<LLDate, LLDate> > t_cert_cache; - t_cert_cache mTrustedCertCache; - - std::string mFilename; + std::vector<LLPointer<LLCertificate> > mCerts; + + // cache of cert sha1 hashes to from/to date pairs, to improve + // performance of cert trust. Note, these are not the CA certs, + // but the certs that have been validated against this store. + typedef std::map<std::string, std::pair<LLDate, LLDate> > t_cert_cache; + t_cert_cache mTrustedCertCache; + + std::string mFilename; }; // class LLCertificateChain -// Class representing a chain of certificates in order, with the +// Class representing a chain of certificates in order, with the // first element being the child cert. class LLBasicCertificateChain : virtual public LLBasicCertificateVector, public LLCertificateChain { - + public: - LLBasicCertificateChain(X509_STORE_CTX * store); - - virtual ~LLBasicCertificateChain() {} - + LLBasicCertificateChain(X509_STORE_CTX * store); + + virtual ~LLBasicCertificateChain() {} + }; @@ -212,14 +212,14 @@ public: class LLSecAPIBasicCredential : public LLCredential { public: - LLSecAPIBasicCredential(const std::string& grid) : LLCredential(grid) {} - virtual ~LLSecAPIBasicCredential() {} - // return a value representing the user id, used for server and voice - // (could be guid, name in format "name_resident", whatever) - virtual std::string userID() const; - - // printible string identifying the credential. - virtual std::string asString() const; + LLSecAPIBasicCredential(const std::string& grid) : LLCredential(grid) {} + virtual ~LLSecAPIBasicCredential() {} + // return a value representing the user id, used for server and voice + // (could be guid, name in format "name_resident", whatever) + virtual std::string userID() const; + + // printible string identifying the credential. + virtual std::string asString() const; }; // LLSecAPIBasicHandler Class @@ -227,121 +227,121 @@ public: class LLSecAPIBasicHandler : public LLSecAPIHandler { public: - - LLSecAPIBasicHandler(const std::string& protected_data_filename, - const std::string& legacy_password_path); - LLSecAPIBasicHandler(); - - void init(); - - virtual ~LLSecAPIBasicHandler(); - - // instantiate a certificate from a pem string - virtual LLPointer<LLCertificate> getCertificate(const std::string& pem_cert); - - - // instiate a certificate from an openssl X509 structure - virtual LLPointer<LLCertificate> getCertificate(X509* openssl_cert); - - // instantiate a chain from an X509_STORE_CTX - virtual LLPointer<LLCertificateChain> getCertificateChain(X509_STORE_CTX* chain); - - // instantiate a cert store given it's id. if a persisted version - // exists, it'll be loaded. If not, one will be created (but not - // persisted) - virtual LLPointer<LLCertificateStore> getCertificateStore(const std::string& store_id); - - // protectedData functions technically should be pretected or private, - // they are not because of llsechandler_basic_test imlementation - - // persist data in a protected store - virtual void setProtectedData(const std::string& data_type, - const std::string& data_id, - const LLSD& data); - - // retrieve protected data - virtual LLSD getProtectedData(const std::string& data_type, - const std::string& data_id); - - // delete a protected data item from the store - virtual void deleteProtectedData(const std::string& data_type, - const std::string& data_id); - - // persist data in a protected store's map - virtual void addToProtectedMap(const std::string& data_type, - const std::string& data_id, - const std::string& map_elem, - const LLSD& data); - - // remove data from protected store's map - virtual void removeFromProtectedMap(const std::string& data_type, - const std::string& data_id, - const std::string& map_elem); - - // ensure protected store's map is written to storage - virtual void syncProtectedMap(); - - // credential management routines - - virtual LLPointer<LLCredential> createCredential(const std::string& grid, - const LLSD& identifier, - const LLSD& authenticator); - - // load single credencial from default storage - virtual LLPointer<LLCredential> loadCredential(const std::string& grid); - - // save credencial to default storage - virtual void saveCredential(LLPointer<LLCredential> cred, bool save_authenticator); - - virtual void deleteCredential(LLPointer<LLCredential> cred); - - // has map of credentials declared as specific storage - virtual bool hasCredentialMap(const std::string& storage, - const std::string& grid); - - // returns true if map is empty or does not exist - virtual bool emptyCredentialMap(const std::string& storage, - const std::string& grid); - - // load map of credentials from specific storage - virtual void loadCredentialMap(const std::string& storage, - const std::string& grid, - credential_map_t& credential_map); - - // load single username from map of credentials from specific storage - virtual LLPointer<LLCredential> loadFromCredentialMap(const std::string& storage, - const std::string& grid, - const std::string& userid); - - // add item to map of credentials from specific storage - virtual void addToCredentialMap(const std::string& storage, - LLPointer<LLCredential> cred, - bool save_authenticator); - - // remove item from map of credentials from specific storage - virtual void removeFromCredentialMap(const std::string& storage, - LLPointer<LLCredential> cred); - - // remove item from map of credentials from specific storage - virtual void removeFromCredentialMap(const std::string& storage, - const std::string& grid, - const std::string& userid); - - virtual void removeCredentialMap(const std::string& storage, - const std::string& grid); + + LLSecAPIBasicHandler(const std::string& protected_data_filename, + const std::string& legacy_password_path); + LLSecAPIBasicHandler(); + + void init(); + + virtual ~LLSecAPIBasicHandler(); + + // instantiate a certificate from a pem string + virtual LLPointer<LLCertificate> getCertificate(const std::string& pem_cert); + + + // instiate a certificate from an openssl X509 structure + virtual LLPointer<LLCertificate> getCertificate(X509* openssl_cert); + + // instantiate a chain from an X509_STORE_CTX + virtual LLPointer<LLCertificateChain> getCertificateChain(X509_STORE_CTX* chain); + + // instantiate a cert store given it's id. if a persisted version + // exists, it'll be loaded. If not, one will be created (but not + // persisted) + virtual LLPointer<LLCertificateStore> getCertificateStore(const std::string& store_id); + + // protectedData functions technically should be pretected or private, + // they are not because of llsechandler_basic_test imlementation + + // persist data in a protected store + virtual void setProtectedData(const std::string& data_type, + const std::string& data_id, + const LLSD& data); + + // retrieve protected data + virtual LLSD getProtectedData(const std::string& data_type, + const std::string& data_id); + + // delete a protected data item from the store + virtual void deleteProtectedData(const std::string& data_type, + const std::string& data_id); + + // persist data in a protected store's map + virtual void addToProtectedMap(const std::string& data_type, + const std::string& data_id, + const std::string& map_elem, + const LLSD& data); + + // remove data from protected store's map + virtual void removeFromProtectedMap(const std::string& data_type, + const std::string& data_id, + const std::string& map_elem); + + // ensure protected store's map is written to storage + virtual void syncProtectedMap(); + + // credential management routines + + virtual LLPointer<LLCredential> createCredential(const std::string& grid, + const LLSD& identifier, + const LLSD& authenticator); + + // load single credencial from default storage + virtual LLPointer<LLCredential> loadCredential(const std::string& grid); + + // save credencial to default storage + virtual void saveCredential(LLPointer<LLCredential> cred, bool save_authenticator); + + virtual void deleteCredential(LLPointer<LLCredential> cred); + + // has map of credentials declared as specific storage + virtual bool hasCredentialMap(const std::string& storage, + const std::string& grid); + + // returns true if map is empty or does not exist + virtual bool emptyCredentialMap(const std::string& storage, + const std::string& grid); + + // load map of credentials from specific storage + virtual void loadCredentialMap(const std::string& storage, + const std::string& grid, + credential_map_t& credential_map); + + // load single username from map of credentials from specific storage + virtual LLPointer<LLCredential> loadFromCredentialMap(const std::string& storage, + const std::string& grid, + const std::string& userid); + + // add item to map of credentials from specific storage + virtual void addToCredentialMap(const std::string& storage, + LLPointer<LLCredential> cred, + bool save_authenticator); + + // remove item from map of credentials from specific storage + virtual void removeFromCredentialMap(const std::string& storage, + LLPointer<LLCredential> cred); + + // remove item from map of credentials from specific storage + virtual void removeFromCredentialMap(const std::string& storage, + const std::string& grid, + const std::string& userid); + + virtual void removeCredentialMap(const std::string& storage, + const std::string& grid); protected: - void _readProtectedData(unsigned char *unique_id, U32 id_len); - void _readProtectedData(); - void _writeProtectedData(); - std::string _legacyLoadPassword(); - - std::string mProtectedDataFilename; - LLSD mProtectedDataMap; - LLPointer<LLBasicCertificateStore> mStore; - - std::string mLegacyPasswordPath; + void _readProtectedData(unsigned char *unique_id, U32 id_len); + void _readProtectedData(); + void _writeProtectedData(); + std::string _legacyLoadPassword(); + + std::string mProtectedDataFilename; + LLSD mProtectedDataMap; + LLPointer<LLBasicCertificateStore> mStore; + + std::string mLegacyPasswordPath; }; bool valueCompareLLSD(const LLSD& lhs, const LLSD& rhs); |