diff options
author | Slávek Banko <[email protected]> | 2015-06-26 13:13:04 +0200 |
---|---|---|
committer | Slávek Banko <[email protected]> | 2015-06-26 13:27:32 +0200 |
commit | 509a3cfb67078d33028c276cee865f41b847f9f3 (patch) | |
tree | 0a80f51d194a3b1587e059a1014de688fdcf3f68 | |
parent | 1aeb94bdae94e8b164eace8125a61443b01c3784 (diff) | |
download | tdenetwork-509a3cfb67078d33028c276cee865f41b847f9f3.tar.gz tdenetwork-509a3cfb67078d33028c276cee865f41b847f9f3.zip |
Add utmpx support in ktalk
[taken from FreeBSD kdenetwork3 patches]
Signed-off-by: Slávek Banko <[email protected]>
-rw-r--r-- | ktalkd/ktalkd/find_user.cpp | 63 | ||||
-rw-r--r-- | ktalkd/ktalkd/includ.h | 3 |
2 files changed, 66 insertions, 0 deletions
diff --git a/ktalkd/ktalkd/find_user.cpp b/ktalkd/ktalkd/find_user.cpp index 37b39428..4cca8b22 100644 --- a/ktalkd/ktalkd/find_user.cpp +++ b/ktalkd/ktalkd/find_user.cpp @@ -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*/ diff --git a/ktalkd/ktalkd/includ.h b/ktalkd/ktalkd/includ.h index 41f36fbd..923b452d 100644 --- a/ktalkd/ktalkd/includ.h +++ b/ktalkd/ktalkd/includ.h @@ -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 |