blob: 37b2c12b09fc1c11ac16c02c5dbb080073ced77b [file] [log] [blame]
Darren Tucker5d72a402005-05-28 20:28:39 +10001/* $Id: port-aix.h,v 1.26 2005/05/28 10:28:40 dtucker Exp $ */
Ben Lindstrom515d0f92003-08-29 16:59:52 +00002
Ben Lindstrom51b24882002-07-04 03:08:40 +00003/*
Ben Lindstrom024f08f2002-07-07 02:17:36 +00004 *
5 * Copyright (c) 2001 Gert Doering. All rights reserved.
Darren Tucker5d72a402005-05-28 20:28:39 +10006 * Copyright (c) 2004, 2005 Darren Tucker. All rights reserved.
Ben Lindstrom024f08f2002-07-07 02:17:36 +00007 *
Ben Lindstrom51b24882002-07-04 03:08:40 +00008 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 * 1. Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Ben Lindstrom51b24882002-07-04 03:08:40 +000027 */
28
Ben Lindstroma9c039c2002-02-19 20:27:55 +000029#ifdef _AIX
Ben Lindstrom4b0f1ad2003-02-01 04:43:34 +000030
Darren Tucker691d5232005-02-15 21:45:57 +110031#ifdef HAVE_SYS_SOCKET_H
32# include <sys/socket.h>
33#endif
Darren Tucker3c774c52005-02-16 22:49:31 +110034#ifdef HAVE_UNISTD_H
35# include <unistd.h> /* for seteuid() */
36#endif
Darren Tucker691d5232005-02-15 21:45:57 +110037
Darren Tuckera0c0b632003-07-08 20:52:12 +100038#ifdef WITH_AIXAUTHENTICATE
39# include <login.h>
40# include <userpw.h>
Darren Tucker91acbf22003-09-19 20:43:38 +100041# if defined(HAVE_SYS_AUDIT_H) && defined(AIX_LOGINFAILED_4ARG)
Darren Tuckera0c0b632003-07-08 20:52:12 +100042# include <sys/audit.h>
43# endif
Darren Tucker91acbf22003-09-19 20:43:38 +100044# include <usersec.h>
Darren Tuckera0c0b632003-07-08 20:52:12 +100045#endif
46
Darren Tucker691d5232005-02-15 21:45:57 +110047#include "buffer.h"
48
Darren Tucker3c774c52005-02-16 22:49:31 +110049/* These should be in the system headers but are not. */
50int usrinfo(int, char *, int);
Darren Tucker5d72a402005-05-28 20:28:39 +100051#if defined(HAVE_DECL_SETAUTHDB) && (HAVE_DECL_SETAUTHDB == 0)
Darren Tucker3c774c52005-02-16 22:49:31 +110052int setauthdb(const char *, char *);
Darren Tuckere66519d2005-03-21 22:46:34 +110053#endif
Darren Tucker3c774c52005-02-16 22:49:31 +110054/* these may or may not be in the headers depending on the version */
Darren Tucker5d72a402005-05-28 20:28:39 +100055#if defined(HAVE_DECL_AUTHENTICATE) && (HAVE_DECL_AUTHENTICATE == 0)
Darren Tucker3c774c52005-02-16 22:49:31 +110056int authenticate(char *, char *, int *, char **);
57#endif
Darren Tucker5d72a402005-05-28 20:28:39 +100058#if defined(HAVE_DECL_LOGINFAILED) && (HAVE_DECL_LOGINFAILED == 0)
Darren Tucker3c774c52005-02-16 22:49:31 +110059int loginfailed(char *, char *, char *);
60#endif
Darren Tucker5d72a402005-05-28 20:28:39 +100061#if defined(HAVE_DECL_LOGINRESTRICTIONS) && (HAVE_DECL_LOGINRESTRICTIONS == 0)
Darren Tucker3c774c52005-02-16 22:49:31 +110062int loginrestrictions(char *, int, char *, char **);
63#endif
Darren Tucker5d72a402005-05-28 20:28:39 +100064#if defined(HAVE_DECL_LOGINSUCCESS) && (HAVE_DECL_LOGINSUCCESS == 0)
Darren Tucker3c774c52005-02-16 22:49:31 +110065int loginsuccess(char *, char *, char *, char **);
66#endif
Darren Tucker5d72a402005-05-28 20:28:39 +100067#if defined(HAVE_DECL_PASSWDEXPIRED) && (HAVE_DECL_PASSWDEXPIRED == 0)
Darren Tucker3c774c52005-02-16 22:49:31 +110068int passwdexpired(char *, char **);
69#endif
70
Darren Tucker30317e32003-07-14 16:26:51 +100071/* Some versions define r_type in the above headers, which causes a conflict */
72#ifdef r_type
73# undef r_type
74#endif
75
Ben Lindstrom4b0f1ad2003-02-01 04:43:34 +000076/* AIX 4.2.x doesn't have nanosleep but does have nsleep which is equivalent */
77#if !defined(HAVE_NANOSLEEP) && defined(HAVE_NSLEEP)
78# define nanosleep(a,b) nsleep(a,b)
79#endif
80
81/* For struct timespec on AIX 4.2.x */
82#ifdef HAVE_SYS_TIMERS_H
83# include <sys/timers.h>
84#endif
85
Darren Tuckere45674a2004-02-06 16:17:51 +110086/*
87 * According to the setauthdb man page, AIX password registries must be 15
88 * chars or less plus terminating NUL.
89 */
90#ifdef HAVE_SETAUTHDB
91# define REGISTRY_SIZE 16
92#endif
93
Darren Tuckerd7634162003-11-22 14:16:56 +110094void aix_usrinfo(struct passwd *);
95
Darren Tucker97363a82003-05-02 23:42:25 +100096#ifdef WITH_AIXAUTHENTICATE
Darren Tuckere3dba822004-02-10 12:50:19 +110097# define CUSTOM_SYS_AUTH_PASSWD 1
Darren Tucker0a9d43d2004-06-23 13:45:24 +100098# define CUSTOM_SYS_AUTH_ALLOWED_USER 1
Darren Tucker691d5232005-02-15 21:45:57 +110099int sys_auth_allowed_user(struct passwd *, Buffer *);
Darren Tucker397a2f22004-08-15 00:09:11 +1000100# define CUSTOM_SYS_AUTH_RECORD_LOGIN 1
Darren Tucker691d5232005-02-15 21:45:57 +1100101int sys_auth_record_login(const char *, const char *, const char *, Buffer *);
Darren Tucker97363a82003-05-02 23:42:25 +1000102# define CUSTOM_FAILED_LOGIN 1
Darren Tucker97363a82003-05-02 23:42:25 +1000103#endif
104
Darren Tuckerd7634162003-11-22 14:16:56 +1100105void aix_setauthdb(const char *);
Darren Tuckere45674a2004-02-06 16:17:51 +1100106void aix_restoreauthdb(void);
Darren Tuckerb9aa0a02003-07-08 22:59:59 +1000107void aix_remove_embedded_newlines(char *);
Darren Tucker691d5232005-02-15 21:45:57 +1100108
109#if defined(AIX_GETNAMEINFO_HACK) && !defined(BROKEN_GETADDRINFO)
110# ifdef getnameinfo
111# undef getnameinfo
112# endif
113int sshaix_getnameinfo(const struct sockaddr *, size_t, char *, size_t,
114 char *, size_t, int);
115# define getnameinfo(a,b,c,d,e,f,g) (sshaix_getnameinfo(a,b,c,d,e,f,g))
116#endif
117
Ben Lindstroma9c039c2002-02-19 20:27:55 +0000118#endif /* _AIX */