public virtual bool SetPassword(UUID principalID, string authType, string password)
        {
            string passwordSalt = Util.Md5Hash(UUID.Random().ToString());
            string md5PasswdHash = Util.Md5Hash(Util.Md5Hash(password) + ":" + passwordSalt);

            AuthData auth = m_Database.Get(principalID, authType);
            if (auth == null)
            {
                auth = new AuthData {PrincipalID = principalID, AccountType = authType};
            }
            auth.PasswordHash = md5PasswdHash;
            auth.PasswordSalt = passwordSalt;
            return SaveAuth (auth, principalID);
        }
        public AuthData Get (UUID principalID, string authType)
        {
            QueryFilter filter = new QueryFilter ();
            filter.andFilters ["UUID"] = principalID;
            filter.andFilters ["accountType"] = authType;
            List<string> query = GD.Query (new string [] { "*" }, m_realm, filter, null, null, null);
            AuthData data = null;
            for (int i = 0; i < query.Count; i += 5) {
                data = new AuthData {
                    PrincipalID = UUID.Parse (query [i]),
                    PasswordHash = query [i + 1],
                    PasswordSalt = query [i + 2],
                    AccountType = query [i + 3]
                };
            }

            return data;
        }
        public virtual bool SetPassword(UUID principalID, string authType, string password)
        {
            string passwordSalt = Util.Md5Hash(UUID.Random().ToString());
            string md5PasswdHash = Util.Md5Hash(Util.Md5Hash(password) + ":" + passwordSalt);

            AuthData auth = m_Database.Get(principalID, authType);
            if (auth == null)
            {
                auth = new AuthData {PrincipalID = principalID, AccountType = authType};
            }
            auth.PasswordHash = md5PasswdHash;
            auth.PasswordSalt = passwordSalt;
            if (!m_Database.Store(auth))
            {
                MainConsole.Instance.DebugFormat("[AUTHENTICATION DB]: Failed to store authentication data");
                return false;
            }

            MainConsole.Instance.InfoFormat("[AUTHENTICATION DB]: Set password for principalID {0}", principalID);
            return true;
        }
        public virtual bool SetPlainPassword(UUID principalID, string authType, string pass)
        {
            AuthData auth = m_Database.Get(principalID, authType);
            if (auth == null)
            {
                auth = new AuthData {PrincipalID = principalID, AccountType = authType};
            }
            auth.PasswordHash = pass;
            auth.PasswordSalt = "";
            if (!m_Database.Store(auth))
            {
                MainConsole.Instance.DebugFormat("[AUTHENTICATION DB]: Failed to store authentication data");
                return false;
            }

            MainConsole.Instance.InfoFormat("[AUTHENTICATION DB]: Set password for principalID {0}", principalID);
            return true;
        }
        public bool Store (AuthData data)
        {
            QueryFilter filter = new QueryFilter ();
            filter.andFilters ["UUID"] = data.PrincipalID;
            filter.andFilters ["accountType"] = data.AccountType;
            GD.Delete (m_realm, filter);
            Dictionary<string, object> row = new Dictionary<string, object> (4);
            row ["UUID"] = data.PrincipalID;
            row ["passwordHash"] = data.PasswordHash;
            row ["passwordSalt"] = data.PasswordSalt;
            row ["accountType"] = data.AccountType;

            return GD.Insert (m_realm, row);
        }
        bool SaveAuth (AuthData auth, UUID principalID)
        {
            if (!m_Database.Store (auth)) {
                MainConsole.Instance.DebugFormat ("[Authentication DB]: Failed to store authentication data");
                return false;
            }

            MainConsole.Instance.InfoFormat ("[Authentication DB]: Set password for principalID {0}", principalID);
            return true;
        }
 public virtual bool SetSaltedPassword (UUID principalID, string authType, string salt, string pass)
 {
     AuthData auth = m_Database.Get (principalID, authType);
     if (auth == null) {
         auth = new AuthData { PrincipalID = principalID, AccountType = authType };
     }
     auth.PasswordHash = pass;
     auth.PasswordSalt = salt;
     return SaveAuth (auth, principalID);
 }