diff options
Diffstat (limited to 'appl/ftp/ftpd/logwtmp.c')
| -rw-r--r-- | appl/ftp/ftpd/logwtmp.c | 85 | 
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 +} | 
