1
/*****************************************************************************/
4
/* Xsok version 1.01 -- module username.c */
6
/* Tries to compute a nice user- and hostname (e-mail address). */
7
/* Written by Michael Bischoff (mbi@mo.math.nat.tu-bs.de) */
9
/* changed October 1995 */
10
/* see COPYRIGHT.xsok for Copyright details */
13
/*****************************************************************************/
19
#include <sys/types.h>
20
#include <sys/utsname.h>
29
void buildusername(const char *name) {
31
if (strlen(name) > 255) {
32
strncpy(username, name, 255);
35
strcpy(username, name);
38
const char *realname, *loginname;
44
/* getlogin() fails when xsok is called from the fvwm window
45
manager menu (why?) and cuserid() has disappeared in POSIX
46
1990. We use getuid() now. */
47
if ((pp = getpwuid(getuid()))) {
48
if (pp->pw_gecos && strchr(pp->pw_gecos, ','))
49
*strchr(pp->pw_gecos, ',') = '\0';
50
realname = pp->pw_gecos;
51
loginname = pp->pw_name;
53
/* unable to obtain passwd entry */
55
loginname = "unknown";
58
strcpy(buf.nodename, "unknown");
60
if ((hp = gethostbyname(buf.nodename)))
61
strcpy(fqdn, hp->h_name);
64
sprintf(fqdn, "%s.(unknown)", buf.nodename);
67
sprintf(username, "%s (%s@%s)", realname, loginname, fqdn);
69
sprintf(username, "%s@%s", loginname, fqdn);
74
int main(int argc, char *argv[]) {
75
if (argc == 3 && !strcmp(argv[1], "-u"))
76
buildusername(argv[2]);
79
printf( /* "Automatically generated username is\n" */
80
"\"%s\"\n", username);