]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Extend Auth::User exposing UserKey as SBuf
authorFrancesco Chemolli <kinkie@squid-cache.org>
Wed, 2 Sep 2015 08:33:30 +0000 (10:33 +0200)
committerFrancesco Chemolli <kinkie@squid-cache.org>
Wed, 2 Sep 2015 08:33:30 +0000 (10:33 +0200)
Implement UserNameCache::insert and sortedUsersList

src/auth/User.h
src/auth/UserNameCache.cc
src/auth/UserNameCache.h

index e080e5ca0bddb1af8827664c2b19e103e86317ce..bebf7f96746859b116c097fbd7df191d716c5c31 100644 (file)
@@ -68,6 +68,8 @@ public:
 
     // NP: key is set at the same time as username_. Until then both are empty/NULL.
     const char *userKey() {return !userKey_.isEmpty() ? userKey_.c_str() : NULL;}
+    // user key as a SBuf
+    const SBuf SBUserKey() { return userKey_;}
 
     /**
      * How long these credentials are still valid for.
index 892f33a9f4aa6087ff63000a382974860d7e17b3..2cd00804eb11fee413f21c4e52f41755da957071 100644 (file)
@@ -58,4 +58,24 @@ UserNameCache::cleanup(void *me)
     }
 }
 
+void
+UserNameCache::insert(Auth::User::Pointer anAuth_user)
+{
+    store_[anAuth_user->SBUserKey()] = anAuth_user;
+}
+
+std::vector<Auth::User::Pointer> UserNameCache::sortedUsersList ()
+{
+    std::vector<Auth::User::Pointer> rv(size(), nullptr);
+    std::transform(store_.begin(), store_.end(), rv.begin(),
+        [](StoreType::value_type v) { return v.second; }
+    );
+    sort(rv.begin(), rv.end(),
+        [](const Auth::User::Pointer &lhs, const Auth::User::Pointer &rhs) {
+            return strcmp(lhs->username(), rhs->username()) < 0;
+        }
+    );
+    return rv;
+}
+
 } /* namespace Auth */
index d40dda9f9b707bebdefea86c894545fd7213ca44..1aa38b488bd4be781866abb42982a2bfed36c320 100644 (file)
@@ -33,16 +33,23 @@ public:
     /// obtain pointer to user if present, or Pointer(nullptr) if not
     Auth::User::Pointer lookup(const SBuf &userKey);
 
+    /// add an user to the cache
+    void insert(Auth::User::Pointer anAuth_user);
+
     void reset();
 
     size_t size();
 
     /** periodic cleanup function, removes timed-out entries
      *
-     * Must be static to support EVH interface. Argument is this
+     * Must be static to support EVH interface. Argument will be this
      */
     static void cleanup(void *);
 
+    /** obtain sorted list of usernames
+     *
+     */
+    std::vector<Auth::User::Pointer> sortedUsersList();
 private:
     StoreType store_;