Add formats for client and server UID and user (for multiuser setups).

This commit is contained in:
nicm
2022-03-08 11:28:40 +00:00
parent a731b1a916
commit 98cd8e4cad
3 changed files with 73 additions and 0 deletions

View File

@ -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
},