//
// File: hzUnixacc.h
//
// Legal Notice: This file is part of the HadronZoo C++ Class Library.
//
// Copyright 2025 HadronZoo Project (http://www.hadronzoo.com)
//
// The HadronZoo C++ Class 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, either version 3 of the License, or any later version.
//
// The HadronZoo C++ Class 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 the HadronZoo C++ Class Library. If not, see http://www.gnu.org/licenses.
//
#ifndef hzUnixacc_h
#define hzUnixacc_h
#include "hzString.h"
#include "hzTmplMapS.h"
class hzUserinfo
{
// Category: System
//
// Information about a UNIX user account
uid_t m_nUserID ; // Numeric user ID.
gid_t m_nGroupID ; // Numeric groupd ID.
time_t m_nPwUpdate ; // Last Password change time.
time_t m_nExpires ; // Account expiration time.
hzString m_Username ; // System user's username
hzString m_Password ; // User's encrypted password.
hzString m_Class ; // User's class or type (not implimented yet)
hzString m_Geninfo ; // General information about the user.
hzString m_Homedir ; // User's home directory.
hzString m_Shell ; // Path of UNIX shell program.
public:
hzUserinfo (void)
{
m_nUserID = 0 ;
m_nGroupID = 0 ;
m_nPwUpdate = 0 ;
m_nExpires = 0 ;
}
~hzUserinfo (void)
{
}
// Get functions
const char* GetUsername (void) { return *m_Username ; }
const char* GetPassword (void) { return *m_Password ; }
const char* GetClass (void) { return *m_Class ; }
const char* GetGeninfo (void) { return *m_Geninfo ; }
const char* GetHomedir (void) { return *m_Homedir ; }
const char* GetShell (void) { return *m_Shell ; }
uid_t GetUserID (void) { return m_nUserID ; }
gid_t GetGroupID (void) { return m_nGroupID ; }
time_t GetPwUpdate (void) { return m_nPwUpdate ; }
time_t GetExpires (void) { return m_nExpires ; }
// Static functions
static hzEcode Load (void) ;
static hzUserinfo* Locate (hzString& Username) ;
static hzUserinfo* Locate (uid_t nUserID) ;
} ;
/*
** Group info class
*/
class hzGroupinfo
{
// Category: System
//
// Information about a group of UNIX users
gid_t m_nGroupID ; // Numeric groupd ID.
hzString m_Groupname ; // System user's username
public:
hzGroupinfo (void)
{
m_nGroupID = 0 ;
}
~hzGroupinfo (void)
{
}
// Get functions
const char* GetGroupname (void) { return *m_Groupname ; }
gid_t GetGroupID (void) { return m_nGroupID ; }
// Static functions
static hzEcode Load (void) ;
static hzGroupinfo* Locate (hzString& Groupname) ;
static hzGroupinfo* Locate (gid_t nGroupID) ;
} ;
extern hzMapS<hzString,hzUserinfo*> _hzGlobal_Userlist ; // All UNIX Users
extern hzMapS<hzString,hzGroupinfo*> _hzGlobal_Grouplist ; // All UNIX User groups
hzEcode ListProcesses (hzMapS<uint32_t,hzProginfo*>& procs) ;
#endif // hzUnixacc_h