mirror of
https://github.com/tmux/tmux.git
synced 2025-09-01 20:57:00 +00:00
Add formats for client and server UID and user (for multiuser setups).
This commit is contained in:
60
format.c
60
format.c
@ -24,6 +24,7 @@
|
||||
#include <fnmatch.h>
|
||||
#include <libgen.h>
|
||||
#include <math.h>
|
||||
#include <pwd.h>
|
||||
#include <regex.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdlib.h>
|
||||
@ -1387,6 +1388,35 @@ format_cb_client_tty(struct format_tree *ft)
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
/* Callback for client_uid. */
|
||||
static void *
|
||||
format_cb_client_uid(struct format_tree *ft)
|
||||
{
|
||||
uid_t uid;
|
||||
|
||||
if (ft->c != NULL) {
|
||||
uid = proc_get_peer_uid(ft->c->peer);
|
||||
if (uid != (uid_t)-1)
|
||||
return (format_printf("%ld", (long)uid));
|
||||
}
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
/* Callback for client_user. */
|
||||
static void *
|
||||
format_cb_client_user(struct format_tree *ft)
|
||||
{
|
||||
uid_t uid;
|
||||
struct passwd *pw;
|
||||
|
||||
if (ft->c != NULL) {
|
||||
uid = proc_get_peer_uid(ft->c->peer);
|
||||
if (uid != (uid_t)-1 && (pw = getpwuid(uid)) != NULL)
|
||||
return (xstrdup(pw->pw_name));
|
||||
}
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
/* Callback for client_utf8. */
|
||||
static void *
|
||||
format_cb_client_utf8(struct format_tree *ft)
|
||||
@ -2521,6 +2551,24 @@ format_cb_tree_mode_format(__unused struct format_tree *ft)
|
||||
return (xstrdup(window_tree_mode.default_format));
|
||||
}
|
||||
|
||||
/* Callback for uid. */
|
||||
static void *
|
||||
format_cb_uid(__unused struct format_tree *ft)
|
||||
{
|
||||
return (format_printf("%ld", (long)getuid()));
|
||||
}
|
||||
|
||||
/* Callback for user. */
|
||||
static void *
|
||||
format_cb_user(__unused struct format_tree *ft)
|
||||
{
|
||||
struct passwd *pw;
|
||||
|
||||
if ((pw = getpwuid(getuid())) != NULL)
|
||||
return (xstrdup(pw->pw_name));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Format table type. */
|
||||
enum format_table_type {
|
||||
FORMAT_TABLE_STRING,
|
||||
@ -2627,6 +2675,12 @@ static const struct format_table_entry format_table[] = {
|
||||
{ "client_tty", FORMAT_TABLE_STRING,
|
||||
format_cb_client_tty
|
||||
},
|
||||
{ "client_uid", FORMAT_TABLE_STRING,
|
||||
format_cb_client_uid
|
||||
},
|
||||
{ "client_user", FORMAT_TABLE_STRING,
|
||||
format_cb_client_user
|
||||
},
|
||||
{ "client_utf8", FORMAT_TABLE_STRING,
|
||||
format_cb_client_utf8
|
||||
},
|
||||
@ -2906,6 +2960,12 @@ static const struct format_table_entry format_table[] = {
|
||||
{ "tree_mode_format", FORMAT_TABLE_STRING,
|
||||
format_cb_tree_mode_format
|
||||
},
|
||||
{ "uid", FORMAT_TABLE_STRING,
|
||||
format_cb_uid
|
||||
},
|
||||
{ "user", FORMAT_TABLE_STRING,
|
||||
format_cb_user
|
||||
},
|
||||
{ "version", FORMAT_TABLE_STRING,
|
||||
format_cb_version
|
||||
},
|
||||
|
Reference in New Issue
Block a user