| Flow-IPC 1.0.2
    Flow-IPC project: Full implementation reference. | 
A process's credentials (PID, UID, GID as of this writing). More...
#include <process_credentials.hpp>
| Public Member Functions | |
| Process_credentials () | |
| Default ctor: each value is initialized to zero or equivalent.  More... | |
| Process_credentials (process_id_t process_id_init, user_id_t user_id_init, group_id_t group_id_init) | |
| Ctor that sets the values explicitly.  More... | |
| Process_credentials (const Process_credentials &src) | |
| Boring copy ctor.  More... | |
| Process_credentials & | operator= (const Process_credentials &src) | 
| Boring copy assignment.  More... | |
| process_id_t | process_id () const | 
| The process ID (PID).  More... | |
| user_id_t | user_id () const | 
| The user ID (UID).  More... | |
| group_id_t | group_id () const | 
| The group user ID (GID).  More... | |
| std::string | process_invoked_as (Error_code *err_code=0) const | 
| Obtains, from the OS, information as to the binary name via which process process_id() was started, per its command line, namely argv[0].  More... | |
| Static Public Member Functions | |
| static process_id_t | own_process_id () | 
| Obtains the calling process's process_id().  More... | |
| static user_id_t | own_user_id () | 
| Obtains the calling process's effective user_id().  More... | |
| static group_id_t | own_group_id () | 
| Obtains the calling process's effective group_id().  More... | |
| static Process_credentials | own_process_credentials () | 
| Constructs and returns Process_credentials containing values pertaining to the calling process at this time.  More... | |
| Private Attributes | |
| ::ucred | m_val | 
| The raw data. By using Linux ucreddirectly, we can reuse this as base for Opt_peer_process_credentials.  More... | |
| Related Functions | |
| (Note that these are not member functions.) | |
| bool | operator== (const Process_credentials &val1, const Process_credentials &val2) | 
| Checks for by-value equality between two Process_credentials objects.  More... | |
| bool | operator!= (const Process_credentials &val1, const Process_credentials &val2) | 
| Checks for by-value inequality between two Process_credentials objects.  More... | |
| std::ostream & | operator<< (std::ostream &os, const Process_credentials &val) | 
| Prints string representation of the given util::Process_credentials to the given ostream.  More... | |
A process's credentials (PID, UID, GID as of this writing).
Definition at line 38 of file process_credentials.hpp.
| ipc::util::Process_credentials::Process_credentials | ( | ) | 
Default ctor: each value is initialized to zero or equivalent.
Definition at line 28 of file process_credentials.cpp.
Referenced by own_process_credentials().
| 
 | explicit | 
Ctor that sets the values explicitly.
| process_id_init | See process_id(). | 
| user_id_init | See user_id(). | 
| group_id_init | See group_id(). | 
Definition at line 34 of file process_credentials.cpp.
References m_val.
| 
 | default | 
Boring copy ctor.
| src | Source object. | 
| group_id_t ipc::util::Process_credentials::group_id | ( | ) | const | 
The group user ID (GID).
Definition at line 57 of file process_credentials.cpp.
References m_val.
Referenced by operator<<(), and operator==().
| 
 | default | 
Boring copy assignment.
| src | Source object. | 
*this. | 
 | static | 
Obtains the calling process's effective group_id().
This value can be changed via OS calls.
Definition at line 136 of file process_credentials.cpp.
Referenced by ipc::session::Client_session_impl< S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload, S_SHM_TYPE_OR_NONE, S_GRACEFUL_FINISH_REQUIRED_V >::async_connect(), and own_process_credentials().
| 
 | static | 
Constructs and returns Process_credentials containing values pertaining to the calling process at this time.
Note that certain values therein may become incorrect over time (see own_user_id(), own_group_id()).
Definition at line 141 of file process_credentials.cpp.
References own_group_id(), own_process_id(), own_user_id(), and Process_credentials().
| 
 | static | 
Obtains the calling process's process_id().
This value will never change.
Definition at line 126 of file process_credentials.cpp.
Referenced by ipc::session::Client_session_impl< S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload, S_SHM_TYPE_OR_NONE, S_GRACEFUL_FINISH_REQUIRED_V >::async_connect(), and own_process_credentials().
| 
 | static | 
Obtains the calling process's effective user_id().
This value can be changed via OS calls.
Definition at line 131 of file process_credentials.cpp.
Referenced by ipc::session::Client_session_impl< S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload, S_SHM_TYPE_OR_NONE, S_GRACEFUL_FINISH_REQUIRED_V >::async_connect(), and own_process_credentials().
| process_id_t ipc::util::Process_credentials::process_id | ( | ) | const | 
The process ID (PID).
Definition at line 47 of file process_credentials.cpp.
References m_val.
Referenced by operator<<(), operator==(), and process_invoked_as().
| std::string ipc::util::Process_credentials::process_invoked_as | ( | Error_code * | err_code = 0 | ) | const | 
Obtains, from the OS, information as to the binary name via which process process_id() was started, per its command line, namely argv[0]. 
In simplified terms this is the executable of *this process; however there are important properties to consider about this information:
Because of these facts we feel it is, informally, best to use this information for one of these use cases:
For these cases it should be reasonable to use.
(Normally we omit impl details in public doc headers, but in this case the utility is low-level, and it may benefit you to know it.)
This builds in Linux only; it reads /proc/(pid)/cmdline (if it exists) and obtains the first NUL-terminated entry there. This is argv[0]. argv space may be overwritten by the process, so it could be something other than the original invocation. Ignoring that, it'll be whatever the command line included; could be absolute or not, normalized or not, the symlink or not... and so on. The tool ps uses the same technique.
One technique was considered: read Linux's /proc/(pid)/exe symlink which points to the absolute, normalized executable path actually invoked. That would have been perfect; however it appears to require admin privileges on our part, and we do not want to require this. On balance, since the original use case prompting this feature (session::App::m_exec_path verification) is acceptably served by the less-demanding /proc/.../cmdline method, we chose that.
| err_code | See flow::Error_codedocs for error reporting semantics. Error_code generated: some system error code; but most likely no-such-file error of some kind, indicating the process is not executing (any longer?). | 
err_code not null), empty string. Caution: If error is not emitted, returned value might still be empty, if the process overrode its own command line (see above). Definition at line 62 of file process_credentials.cpp.
References process_id(), and process_invoked_as().
Referenced by process_invoked_as().
| user_id_t ipc::util::Process_credentials::user_id | ( | ) | const | 
The user ID (UID).
Definition at line 52 of file process_credentials.cpp.
References m_val.
Referenced by operator<<(), and operator==().
| 
 | related | 
Checks for by-value inequality between two Process_credentials objects.
process_invoked_as() does not participate in this and is not invoked.
| val1 | Value to compare. | 
| val2 | Value to compare. | 
Definition at line 152 of file process_credentials.cpp.
References ipc::util::operator==().
| 
 | related | 
Prints string representation of the given util::Process_credentials to the given ostream. 
process_invoked_as() does not participate in this and is not invoked; you may query that information if desired manually; just remember val.process_id() must be live at the time for it to work.
| os | Stream to which to write. | 
| val | Object to serialize. | 
os. Definition at line 157 of file process_credentials.cpp.
References group_id(), process_id(), and user_id().
| 
 | related | 
Checks for by-value equality between two Process_credentials objects.
process_invoked_as() does not participate in this and is not invoked.
| val1 | Value to compare. | 
| val2 | Value to compare. | 
Definition at line 146 of file process_credentials.cpp.
References group_id(), process_id(), and user_id().
| 
 | private | 
The raw data. By using Linux ucred directly, we can reuse this as base for Opt_peer_process_credentials. 
Definition at line 167 of file process_credentials.hpp.
Referenced by group_id(), Process_credentials(), process_id(), and user_id().