Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F152495337
D18790.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
2 KB
Referenced Files
None
Subscribers
None
D18790.diff
View Options
Index: head/bin/sh/parser.c
===================================================================
--- head/bin/sh/parser.c
+++ head/bin/sh/parser.c
@@ -40,6 +40,8 @@
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
+#include <sys/param.h>
+#include <pwd.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
@@ -130,6 +132,7 @@
static void synerror(const char *) __dead2;
static void setprompt(int);
static int pgetc_linecont(void);
+static void getusername(char *, size_t);
static void *
@@ -1969,6 +1972,53 @@
return (c);
}
+
+static struct passwd *
+getpwlogin(void)
+{
+ const char *login;
+
+ login = getlogin();
+ if (login == NULL)
+ return (NULL);
+
+ return (getpwnam(login));
+}
+
+
+static void
+getusername(char *name, size_t namelen)
+{
+ static char cached_name[MAXLOGNAME];
+ struct passwd *pw;
+ uid_t euid;
+
+ if (cached_name[0] == '\0') {
+ euid = geteuid();
+
+ /*
+ * Handle the case when there is more than one
+ * login with the same UID, or when the login
+ * returned by getlogin(2) does no longer match
+ * the current UID.
+ */
+ pw = getpwlogin();
+ if (pw == NULL || pw->pw_uid != euid)
+ pw = getpwuid(euid);
+
+ if (pw != NULL) {
+ strlcpy(cached_name, pw->pw_name,
+ sizeof(cached_name));
+ } else {
+ snprintf(cached_name, sizeof(cached_name),
+ "%u", euid);
+ }
+ }
+
+ strlcpy(name, cached_name, namelen);
+}
+
+
/*
* called by editline -- any expansions to the prompt
* should be added here.
@@ -2024,6 +2074,17 @@
while ((ps[i] != '\0') && (ps[i] != trim))
i++;
--i;
+ break;
+
+ /*
+ * User name.
+ */
+ case 'u':
+ ps[i] = '\0';
+ getusername(&ps[i], PROMPTLEN - i);
+ /* Skip to end of username. */
+ while (ps[i + 1] != '\0')
+ i++;
break;
/*
Index: head/bin/sh/sh.1
===================================================================
--- head/bin/sh/sh.1
+++ head/bin/sh/sh.1
@@ -32,7 +32,7 @@
.\" from: @(#)sh.1 8.6 (Berkeley) 5/4/95
.\" $FreeBSD$
.\"
-.Dd December 8, 2018
+.Dd January 24, 2019
.Dt SH 1
.Os
.Sh NAME
@@ -1402,6 +1402,8 @@
This system's fully-qualified hostname (FQDN).
.It Li \eh
This system's hostname.
+.It Li \eu
+User name.
.It Li \eW
The final component of the current working directory.
.It Li \ew
Index: head/share/skel/dot.shrc
===================================================================
--- head/share/skel/dot.shrc
+++ head/share/skel/dot.shrc
@@ -33,7 +33,7 @@
# set prompt: ``username@hostname:directory $ ''
-PS1="`whoami`@\h:\w \\$ "
+PS1="\u@\h:\w \\$ "
# search path for cd(1)
# CDPATH=:$HOME
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Apr 16, 8:04 AM (9 h, 48 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
31588778
Default Alt Text
D18790.diff (2 KB)
Attached To
Mode
D18790: Make sh(1) support \u in PS1.
Attached
Detach File
Event Timeline
Log In to Comment