#endif
static int login(int ptm) {
#if defined(USE_UTEMPTER)
- return utempter_add_record(ptm, NULL);
+ int result = utempter_add_record(ptm, NULL);
+ /* Exit value of utempter_*() is not correct on all systems, e.g.
+ * FreeBSD() always returns 0. Checking the utmpx database manually is
+ * difficult because we don't know the exact values for ut_id and ut_line,
+ * therefore we only check the return value on systems known to return a
+ * useful value. */
+# ifndef __linux
+ result = 1;
+# endif
+ return result;
#elif defined(USE_UTMPX)
return set_utmpx(USER_PROCESS, ptm);
#else
}
static int logout(int ptm) {
#if defined(USE_UTEMPTER)
- return utempter_remove_record(ptm);
+ int result = utempter_remove_record(ptm);
+ /* See above. */
+# ifndef __linux
+ result = 1;
+# endif
+ return result;
#elif defined(USE_UTMPX)
return set_utmpx(DEAD_PROCESS, ptm);
#else
pid_t pid;
- /* Skip argv[0]. */
- argv++;
-
if (pipe(fds) != 0) {
perror("pipe");
return;
}
}
+static void usage(const char *argv0) {
+ fprintf(stderr, "usage: %s <cmd args..>\n", argv0);
+ exit(EXIT_FAILURE);
+}
+
int main(int argc, char **argv) {
int ptm, pts;
char *name;
+ const char *argv0;
+
+ argv0 = argv[0];
+ /* Don't pass our argv[0] to the notification program. */
+ argv++;
if (argc < 2) {
- fprintf(stderr, "usage: %s <cmd args..>\n", argv[0]);
- exit(EXIT_FAILURE);
+ usage(argv0);
}
ptm = open_tty();