summaryrefslogtreecommitdiff
path: root/indra/newview/llsechandler_basic.h
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llsechandler_basic.h')
-rw-r--r--indra/newview/llsechandler_basic.h504
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);