summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSlávek Banko <slavek.banko@axis.cz>2015-06-26 13:13:04 +0200
committerSlávek Banko <slavek.banko@axis.cz>2015-06-26 13:27:32 +0200
commit509a3cfb67078d33028c276cee865f41b847f9f3 (patch)
tree0a80f51d194a3b1587e059a1014de688fdcf3f68
parent1aeb94bdae94e8b164eace8125a61443b01c3784 (diff)
downloadtdenetwork-509a3cfb.tar.gz
tdenetwork-509a3cfb.zip
Add utmpx support in ktalk
[taken from FreeBSD kdenetwork3 patches] Signed-off-by: Slávek Banko <slavek.banko@axis.cz>
-rw-r--r--ktalkd/ktalkd/find_user.cpp63
-rw-r--r--ktalkd/ktalkd/includ.h3
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