port-aix.h revision 197679
1195377Ssam/* $Id: port-aix.h,v 1.31 2009/08/20 06:20:50 dtucker Exp $ */
2195377Ssam
3195377Ssam/*
4195377Ssam *
5195377Ssam * Copyright (c) 2001 Gert Doering.  All rights reserved.
6195377Ssam * Copyright (c) 2004,2005,2006 Darren Tucker.  All rights reserved.
7195377Ssam *
8195377Ssam * Redistribution and use in source and binary forms, with or without
9195377Ssam * modification, are permitted provided that the following conditions
10195377Ssam * are met:
11195377Ssam * 1. Redistributions of source code must retain the above copyright
12195377Ssam *    notice, this list of conditions and the following disclaimer.
13195377Ssam * 2. Redistributions in binary form must reproduce the above copyright
14195377Ssam *    notice, this list of conditions and the following disclaimer in the
15195377Ssam *    documentation and/or other materials provided with the distribution.
16195377Ssam *
17195377Ssam * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18195377Ssam * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19195377Ssam * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20195377Ssam * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21195377Ssam * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22195377Ssam * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23195377Ssam * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24195377Ssam * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25195377Ssam * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26195377Ssam * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27195377Ssam */
28195377Ssam
29195377Ssam#ifdef _AIX
30195377Ssam
31195377Ssam#ifdef HAVE_SYS_SOCKET_H
32195377Ssam# include <sys/socket.h>
33195377Ssam#endif
34195377Ssam
35195377Ssam#include "buffer.h"
36195377Ssam
37195377Ssam/* These should be in the system headers but are not. */
38195377Ssamint usrinfo(int, char *, int);
39195377Ssam#if defined(HAVE_DECL_SETAUTHDB) && (HAVE_DECL_SETAUTHDB == 0)
40295126Sglebiusint setauthdb(const char *, char *);
41195377Ssam#endif
42195377Ssam/* these may or may not be in the headers depending on the version */
43195377Ssam#if defined(HAVE_DECL_AUTHENTICATE) && (HAVE_DECL_AUTHENTICATE == 0)
44195377Ssamint authenticate(char *, char *, int *, char **);
45195377Ssam#endif
46257176Sglebius#if defined(HAVE_DECL_LOGINFAILED) && (HAVE_DECL_LOGINFAILED == 0)
47195377Ssamint loginfailed(char *, char *, char *);
48195377Ssam#endif
49195377Ssam#if defined(HAVE_DECL_LOGINRESTRICTIONS) && (HAVE_DECL_LOGINRESTRICTIONS == 0)
50195377Ssamint loginrestrictions(char *, int, char *, char **);
51195377Ssam#endif
52195618Srpaulo#if defined(HAVE_DECL_LOGINSUCCESS) && (HAVE_DECL_LOGINSUCCESS == 0)
53195377Ssamint loginsuccess(char *, char *, char *, char **);
54195377Ssam#endif
55195377Ssam#if defined(HAVE_DECL_PASSWDEXPIRED) && (HAVE_DECL_PASSWDEXPIRED == 0)
56195377Ssamint passwdexpired(char *, char **);
57195377Ssam#endif
58195377Ssam
59195377Ssam/* Some versions define r_type in the above headers, which causes a conflict */
60195377Ssam#ifdef r_type
61195377Ssam# undef r_type
62195377Ssam#endif
63195377Ssam
64195377Ssam/* AIX 4.2.x doesn't have nanosleep but does have nsleep which is equivalent */
65195377Ssam#if !defined(HAVE_NANOSLEEP) && defined(HAVE_NSLEEP)
66195377Ssam# define nanosleep(a,b) nsleep(a,b)
67195377Ssam#endif
68195377Ssam
69195377Ssam/* For struct timespec on AIX 4.2.x */
70195377Ssam#ifdef HAVE_SYS_TIMERS_H
71195377Ssam# include <sys/timers.h>
72246502Smonthadar#endif
73195377Ssam
74195377Ssam/* for setpcred and friends */
75195377Ssam#ifdef HAVE_USERSEC_H
76195377Ssam# include <usersec.h>
77195377Ssam#endif
78195377Ssam
79195377Ssam/*
80195377Ssam * According to the setauthdb man page, AIX password registries must be 15
81195377Ssam * chars or less plus terminating NUL.
82330470Seadler */
83330470Seadler#ifdef HAVE_SETAUTHDB
84330470Seadler# define REGISTRY_SIZE	16
85330470Seadler#endif
86195377Ssam
87195377Ssamvoid aix_usrinfo(struct passwd *);
88195377Ssam
89195377Ssam#ifdef WITH_AIXAUTHENTICATE
90195377Ssam# define CUSTOM_SYS_AUTH_PASSWD 1
91254315Srpaulo# define CUSTOM_SYS_AUTH_ALLOWED_USER 1
92195377Ssamint sys_auth_allowed_user(struct passwd *, Buffer *);
93195377Ssam# define CUSTOM_SYS_AUTH_RECORD_LOGIN 1
94195377Ssamint sys_auth_record_login(const char *, const char *, const char *, Buffer *);
95195377Ssam# define CUSTOM_SYS_AUTH_GET_LASTLOGIN_MSG
96254315Srpaulochar *sys_auth_get_lastlogin_msg(const char *, uid_t);
97195377Ssam# define CUSTOM_FAILED_LOGIN 1
98195377Ssam#endif
99195377Ssam
100234874Smonthadarvoid aix_setauthdb(const char *);
101254315Srpaulovoid aix_restoreauthdb(void);
102195377Ssamvoid aix_remove_embedded_newlines(char *);
103195377Ssam
104195377Ssam#if defined(AIX_GETNAMEINFO_HACK) && !defined(BROKEN_GETADDRINFO)
105232479Sadrian# ifdef getnameinfo
106254315Srpaulo#  undef getnameinfo
107246502Smonthadar# endif
108246502Smonthadarint sshaix_getnameinfo(const struct sockaddr *, size_t, char *, size_t,
109246502Smonthadar    char *, size_t, int);
110195377Ssam# define getnameinfo(a,b,c,d,e,f,g) (sshaix_getnameinfo(a,b,c,d,e,f,g))
111254315Srpaulo#endif
112195377Ssam
113195377Ssam/*
114195377Ssam * We use getgrset in preference to multiple getgrent calls for efficiency
115330470Seadler * plus it supports NIS and LDAP groups.
116330470Seadler */
117330470Seadler#if !defined(HAVE_GETGROUPLIST) && defined(HAVE_GETGRSET)
118330470Seadler# define HAVE_GETGROUPLIST
119330470Seadler# define USE_GETGRSET
120195377Ssamint getgrouplist(const char *, gid_t, gid_t *, int *);
121195377Ssam#endif
122195377Ssam
123195377Ssam#endif /* _AIX */
124195377Ssam