]> git.saurik.com Git - apple/network_cmds.git/blobdiff - ftpd.tproj/logwtmp.c
network_cmds-77.tar.gz
[apple/network_cmds.git] / ftpd.tproj / logwtmp.c
index cca4d2678f33b503ca005f498c99560d42db22a5..904f52577f79d0f591d0857047a5fbb261f0b459 100644 (file)
@@ -1,26 +1,3 @@
-/*
- * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
- *
- * @APPLE_LICENSE_HEADER_START@
- * 
- * "Portions Copyright (c) 1999 Apple Computer, Inc.  All Rights
- * Reserved.  This file contains Original Code and/or Modifications of
- * Original Code as defined in and that are subject to the Apple Public
- * Source License Version 1.0 (the 'License').  You may not use this file
- * except in compliance with the License.  Please obtain a copy of the
- * License at http://www.apple.com/publicsource and read it before using
- * this file.
- * 
- * The Original Code and all software distributed under the License are
- * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
- * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
- * License for the specific language governing rights and limitations
- * under the License."
- * 
- * @APPLE_LICENSE_HEADER_END@
- */
 /*
  * Copyright (c) 1988, 1993
  *     The Regents of the University of California.  All rights reserved.
  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
- *
  */
 
 #ifndef lint
+#if 0
 static char sccsid[] = "@(#)logwtmp.c  8.1 (Berkeley) 6/4/93";
+#endif
+static const char rcsid[] =
+  "$FreeBSD: src/libexec/ftpd/logwtmp.c,v 1.9 2000/01/27 09:28:21 shin Exp $";
 #endif /* not lint */
 
 #include <sys/types.h>
-#include <sys/time.h>
 #include <sys/stat.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <sys/socket.h>
 
 #include <fcntl.h>
+#include <time.h>
+#include <netdb.h>
 #include <utmp.h>
 #include <unistd.h>
 #include <stdio.h>
@@ -78,12 +62,45 @@ static int fd = -1;
  * after login, but before logout).
  */
 void
-logwtmp(line, name, host)
+ftpd_logwtmp(line, name, host)
        char *line, *name, *host;
 {
        struct utmp ut;
        struct stat buf;
 
+#if defined(HAVE_GETNAMEINFO)
+       if (strlen(host) > UT_HOSTSIZE) {
+               struct addrinfo hints, *res;
+               int error;
+               static char hostbuf[BUFSIZ];
+
+               memset(&hints, 0, sizeof(hints));
+               hints.ai_family = PF_UNSPEC;
+               error = getaddrinfo(host, NULL, &hints, &res);
+               if (error)
+                       host = "invalid hostname";
+               else {
+                       getnameinfo(res->ai_addr, res->ai_addrlen,
+                               hostbuf, sizeof(hostbuf), NULL, 0,
+                               NI_NUMERICHOST);
+                       host = hostbuf;
+                       if (strlen(host) > UT_HOSTSIZE)
+                               host[UT_HOSTSIZE] = '\0';
+               }
+       }
+#else
+       if (strlen(host) > UT_HOSTSIZE) {
+               struct hostent *hp = gethostbyname(host);
+
+               if (hp != NULL) {
+                       struct in_addr in;
+
+                       memmove(&in, hp->h_addr, sizeof(in));
+                       host = inet_ntoa(in);
+               } else
+                       host = "invalid hostname";
+       }
+#endif
        if (fd < 0 && (fd = open(_PATH_WTMP, O_WRONLY|O_APPEND, 0)) < 0)
                return;
        if (fstat(fd, &buf) == 0) {