1f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifndef _HAVE_LOGINREC_H_ 2f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define _HAVE_LOGINREC_H_ 3f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 4f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* 5f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * Copyright (c) 2000 Andre Lucas. All rights reserved. 6f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * 7f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * Redistribution and use in source and binary forms, with or without 8f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * modification, are permitted provided that the following conditions 9f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * are met: 10f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 11f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * notice, this list of conditions and the following disclaimer. 12f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 13f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 14f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * documentation and/or other materials provided with the distribution. 15f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * 16f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 17f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 18f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 19f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 20f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 21f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 22f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 23f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 25f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project */ 27f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 28f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/** 29f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ** loginrec.h: platform-independent login recording and lastlog retrieval 30f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project **/ 31f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 32f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#include "includes.h" 33f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 34f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* RCSID("Id: loginrec.h,v 1.2 2004/05/04 10:17:43 matt Exp "); */ 35f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 36f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* The following #defines are from OpenSSH's defines.h, required for loginrec */ 37f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 38f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* FIXME: put default paths back in */ 39f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifndef UTMP_FILE 40f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project# ifdef _PATH_UTMP 41f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project# define UTMP_FILE _PATH_UTMP 42f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project# else 43f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project# ifdef CONF_UTMP_FILE 44f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project# define UTMP_FILE CONF_UTMP_FILE 45f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project# endif 46f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project# endif 47f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 48f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifndef WTMP_FILE 49f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project# ifdef _PATH_WTMP 50f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project# define WTMP_FILE _PATH_WTMP 51f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project# else 52f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project# ifdef CONF_WTMP_FILE 53f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project# define WTMP_FILE CONF_WTMP_FILE 54f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project# endif 55f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project# endif 56f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 57f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* pick up the user's location for lastlog if given */ 58f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifndef LASTLOG_FILE 59f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project# ifdef _PATH_LASTLOG 60f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project# define LASTLOG_FILE _PATH_LASTLOG 61f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project# else 62f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project# ifdef CONF_LASTLOG_FILE 63f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project# define LASTLOG_FILE CONF_LASTLOG_FILE 64f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project# endif 65f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project# endif 66f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 67f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 68f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 69f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* The login() library function in libutil is first choice */ 70f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#if defined(HAVE_LOGIN) && !defined(DISABLE_LOGIN) 71f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project# define USE_LOGIN 72f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 73f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#else 74f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* Simply select your favourite login types. */ 75f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* Can't do if-else because some systems use several... <sigh> */ 76f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project# if defined(UTMPX_FILE) && !defined(DISABLE_UTMPX) 77f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project# define USE_UTMPX 78f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project# endif 79f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project# if defined(UTMP_FILE) && !defined(DISABLE_UTMP) 80f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project# define USE_UTMP 81f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project# endif 82f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project# if defined(WTMPX_FILE) && !defined(DISABLE_WTMPX) 83f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project# define USE_WTMPX 84f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project# endif 85f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project# if defined(WTMP_FILE) && !defined(DISABLE_WTMP) 86f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project# define USE_WTMP 87f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project# endif 88f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 89f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 90f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 91f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* I hope that the presence of LASTLOG_FILE is enough to detect this */ 92f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#if defined(LASTLOG_FILE) && !defined(DISABLE_LASTLOG) 93f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project# define USE_LASTLOG 94f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 95f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 96f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 97f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/** 98f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ** you should use the login_* calls to work around platform dependencies 99f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project **/ 100f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 101f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* 102f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * login_netinfo structure 103f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project */ 104f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 105f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectunion login_netinfo { 106f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project struct sockaddr sa; 107f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project struct sockaddr_in sa_in; 108f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef HAVE_STRUCT_SOCKADDR_STORAGE 109f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project struct sockaddr_storage sa_storage; 110f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 111f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project}; 112f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 113f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* 114f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * * logininfo structure * 115f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project */ 116f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* types - different to utmp.h 'type' macros */ 117f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* (though set to the same value as linux, openbsd and others...) */ 118f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define LTYPE_LOGIN 7 119f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define LTYPE_LOGOUT 8 120f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 121f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* string lengths - set very long */ 122f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define LINFO_PROGSIZE 64 123f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define LINFO_LINESIZE 64 124f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define LINFO_NAMESIZE 64 125f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define LINFO_HOSTSIZE 256 126f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 127f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstruct logininfo { 128f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project char progname[LINFO_PROGSIZE]; /* name of program (for PAM) */ 129f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project int progname_null; 130f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project short int type; /* type of login (LTYPE_*) */ 131f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project int pid; /* PID of login process */ 132f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project int uid; /* UID of this user */ 133f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project char line[LINFO_LINESIZE]; /* tty/pty name */ 134f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project char username[LINFO_NAMESIZE]; /* login username */ 135f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project char hostname[LINFO_HOSTSIZE]; /* remote hostname */ 136f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* 'exit_status' structure components */ 137f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project int exit; /* process exit status */ 138f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project int termination; /* process termination status */ 139f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* struct timeval (sys/time.h) isn't always available, if it isn't we'll 140f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * use time_t's value as tv_sec and set tv_usec to 0 141f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project */ 142f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project unsigned int tv_sec; 143f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project unsigned int tv_usec; 144f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project union login_netinfo hostaddr; /* caller's host address(es) */ 145f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project}; /* struct logininfo */ 146f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 147f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* 148f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * login recording functions 149f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project */ 150f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 151f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/** 'public' functions */ 152f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 153f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstruct logininfo *login_alloc_entry(int pid, const char *username, 154f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project const char *hostname, const char *line); 155f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* free a structure */ 156f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectvoid login_free_entry(struct logininfo *li); 157f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* fill out a pre-allocated structure with useful information */ 158f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectint login_init_entry(struct logininfo *li, int pid, const char *username, 159f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project const char *hostname, const char *line); 160f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* place the current time in a logininfo struct */ 161f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectvoid login_set_current_time(struct logininfo *li); 162f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 163f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* record the entry */ 164f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectint login_login (struct logininfo *li); 165f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectint login_logout(struct logininfo *li); 166f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef LOGIN_NEEDS_UTMPX 167f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectint login_utmp_only(struct logininfo *li); 168f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 169f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 170f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/** End of public functions */ 171f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 172f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* record the entry */ 173f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectint login_write (struct logininfo *li); 174f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectint login_log_entry(struct logininfo *li); 175f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 176f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* set the network address based on network address type */ 177f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectvoid login_set_addr(struct logininfo *li, const struct sockaddr *sa, 178f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project const unsigned int sa_size); 179f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 180f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* produce various forms of the line filename */ 181f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectchar *line_fullname(char *dst, const char *src, size_t dstsize); 182f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectchar *line_stripname(char *dst, const char *src, size_t dstsize); 183f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectchar *line_abbrevname(char *dst, const char *src, size_t dstsize); 184f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 185f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif /* _HAVE_LOGINREC_H_ */ 186