⚝
One Hat Cyber Team
⚝
Your IP:
216.73.216.23
Server IP:
178.33.27.10
Server:
Linux cpanel.dev-unit.com 3.10.0-1160.108.1.el7.x86_64 #1 SMP Thu Jan 25 16:17:31 UTC 2024 x86_64
Server Software:
Apache/2.4.57 (Unix) OpenSSL/1.0.2k-fips
PHP Version:
8.2.11
Buat File
|
Buat Folder
Eksekusi
Dir :
~
/
usr
/
local
/
src
/
netdata
/
src
/
libnetdata
/
maps
/
View File Name :
system-groups.h
// SPDX-License-Identifier: GPL-3.0-or-later #ifndef NETDATA_SYSTEM_GROUPS_H #define NETDATA_SYSTEM_GROUPS_H #include "libnetdata/libnetdata.h" // -------------------------------------------------------------------------------------------------------------------- // hashtable for caching uid to username mappings // key is the uid, value is username (STRING) #define SIMPLE_HASHTABLE_VALUE_TYPE STRING #define SIMPLE_HASHTABLE_NAME _GROUPNAMES_CACHE #include "libnetdata/simple_hashtable.h" typedef struct groupnames_cache { SPINLOCK spinlock; SIMPLE_HASHTABLE_GROUPNAMES_CACHE ht; } GROUPNAMES_CACHE; static inline STRING *system_groupnames_cache_lookup_gid(GROUPNAMES_CACHE *gc, gid_t gid) { spinlock_lock(&gc->spinlock); SIMPLE_HASHTABLE_SLOT_GROUPNAMES_CACHE *sl = simple_hashtable_get_slot_GROUPNAMES_CACHE(&gc->ht, gid, &gid, true); STRING *g = SIMPLE_HASHTABLE_SLOT_DATA(sl); if(!g) { char tmp[1024 + 1]; struct group grp, *result = NULL; if (getgrgid_r(gid, &grp, tmp, sizeof(tmp), &result) != 0 || !result || !grp.gr_name || !(*grp.gr_name)) { char name[50]; snprintfz(name, sizeof(name), "%u", gid); g = string_strdupz(name); } else g = string_strdupz(grp.gr_name); simple_hashtable_set_slot_GROUPNAMES_CACHE(&gc->ht, sl, gid, g); } g = string_dup(g); spinlock_unlock(&gc->spinlock); return g; } static inline GROUPNAMES_CACHE *system_groupnames_cache_init(void) { GROUPNAMES_CACHE *gc = callocz(1, sizeof(*gc)); spinlock_init(&gc->spinlock); simple_hashtable_init_GROUPNAMES_CACHE(&gc->ht, 100); return gc; } static inline void system_groupnames_cache_destroy(GROUPNAMES_CACHE *gc) { spinlock_lock(&gc->spinlock); for(SIMPLE_HASHTABLE_SLOT_GROUPNAMES_CACHE *sl = simple_hashtable_first_read_only_GROUPNAMES_CACHE(&gc->ht); sl; sl = simple_hashtable_next_read_only_GROUPNAMES_CACHE(&gc->ht, sl)) { STRING *u = SIMPLE_HASHTABLE_SLOT_DATA(sl); string_freez(u); } simple_hashtable_destroy_GROUPNAMES_CACHE(&gc->ht); freez(gc); } #endif //NETDATA_SYSTEM_GROUPS_H