diff --git a/source3/include/proto.h b/source3/include/proto.h index 453f8e99df5..54500009c4d 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -7117,6 +7117,11 @@ void become_root(void); void unbecome_root(void); bool become_user(connection_struct *conn, uint16 vuid); bool unbecome_user(void); +uid_t get_current_uid(connection_struct *conn); +gid_t get_current_gid(connection_struct *conn); +const UNIX_USER_TOKEN *get_current_utok(connection_struct *conn); +const NT_USER_TOKEN *get_current_nttok(connection_struct *conn); +uint16_t get_current_vuid(connection_struct *conn); /* The following definitions come from smbd/utmp.c */ diff --git a/source3/smbd/uid.c b/source3/smbd/uid.c index 706f8c9f6af..5e3b84da500 100644 --- a/source3/smbd/uid.c +++ b/source3/smbd/uid.c @@ -505,3 +505,46 @@ bool unbecome_user(void) pop_conn_ctx(); return True; } + +/**************************************************************************** + Return the current user we are running effectively as on this connection. + I'd like to make this return conn->server_info->utok.uid, but become_root() + doesn't alter this value. +****************************************************************************/ + +uid_t get_current_uid(connection_struct *conn) +{ + return current_user.ut.uid; +} + +/**************************************************************************** + Return the current group we are running effectively as on this connection. + I'd like to make this return conn->server_info->utok.gid, but become_root() + doesn't alter this value. +****************************************************************************/ + +gid_t get_current_gid(connection_struct *conn) +{ + return current_user.ut.gid; +} + +/**************************************************************************** + Return the UNIX token we are running effectively as on this connection. + I'd like to make this return &conn->server_info->utok, but become_root() + doesn't alter this value. +****************************************************************************/ + +const UNIX_USER_TOKEN *get_current_utok(connection_struct *conn) +{ + return ¤t_user.ut; +} + +const NT_USER_TOKEN *get_current_nttok(connection_struct *conn) +{ + return current_user.nt_user_token; +} + +uint16_t get_current_vuid(connection_struct *conn) +{ + return current_user.vuid; +}