aboutsummaryrefslogtreecommitdiff
path: root/appl/ftp/ftpd/logwtmp.c
diff options
context:
space:
mode:
Diffstat (limited to 'appl/ftp/ftpd/logwtmp.c')
-rw-r--r--appl/ftp/ftpd/logwtmp.c85
1 files changed, 73 insertions, 12 deletions
diff --git a/appl/ftp/ftpd/logwtmp.c b/appl/ftp/ftpd/logwtmp.c
index ebf37e6b14f1..59f45b205d73 100644
--- a/appl/ftp/ftpd/logwtmp.c
+++ b/appl/ftp/ftpd/logwtmp.c
@@ -1,23 +1,23 @@
/*
- * Copyright (c) 1995 - 2000 Kungliga Tekniska Högskolan
+ * Copyright (c) 1995 - 2000 Kungliga Tekniska Högskolan
* (Royal Institute of Technology, Stockholm, Sweden).
* All rights reserved.
- *
+ *
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
- *
+ *
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
- *
+ *
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- *
+ *
* 3. Neither the name of the Institute nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
- *
+ *
* THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@@ -33,7 +33,7 @@
#ifdef HAVE_CONFIG_H
#include <config.h>
-RCSID("$Id: logwtmp.c 9079 2000-09-19 13:17:20Z assar $");
+RCSID("$Id$");
#endif
#include <stdio.h>
@@ -58,9 +58,13 @@ RCSID("$Id: logwtmp.c 9079 2000-09-19 13:17:20Z assar $");
#ifdef HAVE_UTMPX_H
#include <utmpx.h>
#endif
+#ifdef HAVE_ASL_H
+#include <asl.h>
+#endif
#include <roken.h>
#include "extern.h"
+#ifndef HAVE_UTMPX_H
#ifndef WTMP_FILE
#ifdef _PATH_WTMP
#define WTMP_FILE _PATH_WTMP
@@ -68,20 +72,56 @@ RCSID("$Id: logwtmp.c 9079 2000-09-19 13:17:20Z assar $");
#define WTMP_FILE "/var/adm/wtmp"
#endif
#endif
+#endif
-void
-ftpd_logwtmp(char *line, char *name, char *host)
+#ifdef HAVE_ASL_H
+
+#ifndef ASL_KEY_FACILITY
+#define ASL_KEY_FACILITY "Facility"
+#endif
+
+static void
+ftpd_logwtmp_asl(char *line, char *name, char *host)
+{
+ static aslmsg m = NULL;
+ static int init = 0;
+
+ if (!init) {
+ init = 1;
+ m = asl_new(ASL_TYPE_MSG);
+ if (m == NULL)
+ return;
+ asl_set(m, ASL_KEY_FACILITY, "org.h5l.ftpd");
+ }
+ if (m)
+ asl_log(NULL, m, ASL_LEVEL_NOTICE,
+ "host %s/%s user %s%sconnected pid %d",
+ host, line, name, name[0] ? " " : "dis", (int)getpid());
+}
+
+#endif
+
+#ifndef HAVE_ASL_H
+
+static void
+ftpd_logwtmp_wtmp(char *line, char *name, char *host)
{
static int init = 0;
static int fd;
#ifdef WTMPX_FILE
static int fdx;
#endif
+#ifdef HAVE_UTMP_H
struct utmp ut;
-#ifdef WTMPX_FILE
+#endif
+#if defined(WTMPX_FILE) || defined(HAVE_UTMPX_H)
struct utmpx utx;
#endif
+#ifdef HAVE_UTMPX_H
+ memset(&utx, 0, sizeof(struct utmpx));
+#endif
+#ifdef HAVE_UTMP_H
memset(&ut, 0, sizeof(struct utmp));
#ifdef HAVE_STRUCT_UTMP_UT_TYPE
if(name[0])
@@ -98,8 +138,9 @@ ftpd_logwtmp(char *line, char *name, char *host)
strncpy(ut.ut_host, host, sizeof(ut.ut_host));
#endif
ut.ut_time = time(NULL);
+#endif
-#ifdef WTMPX_FILE
+#if defined(WTMPX_FILE) || defined(HAVE_UTMPX_H)
strncpy(utx.ut_line, line, sizeof(utx.ut_line));
strncpy(utx.ut_user, name, sizeof(utx.ut_user));
strncpy(utx.ut_host, host, sizeof(utx.ut_host));
@@ -122,17 +163,37 @@ ftpd_logwtmp(char *line, char *name, char *host)
utx.ut_type = DEAD_PROCESS;
#endif
+#ifdef HAVE_UTMPX_H
+ pututxline(&utx);
+#endif
+
if(!init){
+#ifdef WTMP_FILE
fd = open(WTMP_FILE, O_WRONLY|O_APPEND, 0);
+#endif
#ifdef WTMPX_FILE
fdx = open(WTMPX_FILE, O_WRONLY|O_APPEND, 0);
#endif
init = 1;
}
if(fd >= 0) {
+#ifdef WTMP_FILE
write(fd, &ut, sizeof(struct utmp)); /* XXX */
+#endif
#ifdef WTMPX_FILE
write(fdx, &utx, sizeof(struct utmpx));
-#endif
+#endif
}
}
+
+#endif /* !HAVE_ASL_H */
+
+void
+ftpd_logwtmp(char *line, char *name, char *host)
+{
+#ifdef HAVE_ASL_H
+ ftpd_logwtmp_asl(line, name, host);
+#else
+ ftpd_logwtmp_wtmp(line, name, host);
+#endif
+}