Add utmpx support in ktalk

[taken from FreeBSD kdenetwork3 patches]

Signed-off-by: Slávek Banko <slavek.banko@axis.cz>
(cherry picked from commit 509a3cfb67)
pull/38/head
Slávek Banko 10 years ago
parent 6deb0a334c
commit 63de5bec69

@ -339,6 +339,66 @@ int find_user(char *name, char *tty, char *disp) {
#else /*not PROC_FIND_USER*/
#ifdef HAVE_UTMPX_H
int find_user(char *name, char *tty, char *disp) {
struct utmpx *ubuf;
int status;
struct stat statb;
char ftty[20 + sizeof ubuf->ut_line];
char ttyFound[sizeof ubuf->ut_line] = "";
char dispFound[sizeof ubuf->ut_line + 1] = "";
setutxent();
#define SCMPN(a, b) strncmp(a, b, sizeof (a))
status = NOT_HERE;
(void) strcpy(ftty, _PATH_DEV);
while ((ubuf = getutxent())) {
if ((ubuf->ut_type == USER_PROCESS) &&
(!SCMPN(ubuf->ut_user, name))) {
if (*tty == '\0') {
/* no particular tty was requested */
(void) strcpy(ftty+5, ubuf->ut_line);
if (stat(ftty,&statb) == 0) {
if (!(statb.st_mode & 020)) /* ?character device? */
continue;
(void) strcpy(ttyFound, ubuf->ut_line);
#ifdef USE_UT_HOST
(void) strcpy(dispFound, ubuf->ut_host);
strcat(dispFound, " ");
#endif
status = SUCCESS;
syslog(LOG_DEBUG, "%s", ttyFound);
if ((int) ttyFound[3] > (int) 'f') {
#ifdef USE_UT_HOST
if (Options.debug_mode) {
syslog(LOG_DEBUG, "I wanna this:%s", ttyFound);
syslog(LOG_DEBUG, "ut_host=%s", ubuf.ut_host);
syslog(LOG_DEBUG, "%s", ubuf.ut_line);
}
#endif
break;
}
}
}
else if (!strcmp(ubuf->ut_line, tty)) {
status = SUCCESS;
break;
}
}
}
endutxent();
if (status == SUCCESS) {
(void) strcpy(tty, ttyFound);
(void) strcpy(disp, dispFound);
}
return (status);
}
#else /* HAVE_UTMPX_H */
int find_user(char *name, char *tty, char *disp) {
struct utmp ubuf;
@ -397,4 +457,7 @@ int find_user(char *name, char *tty, char *disp) {
}
return (status);
}
#endif /* HAVE_UTMPX_H */
#endif /*PROC_FIND_USER*/

@ -58,6 +58,9 @@
#ifdef HAVE_UTMP_H
#include <utmp.h>
#endif
#ifdef HAVE_UTMPX_H
#include <utmpx.h>
#endif
#ifndef UT_LINESIZE
#define UT_LINESIZE 12
#endif

Loading…
Cancel
Save