1d4af9e69SDag-Erling Smørgrav /* $Id: port-aix.h,v 1.29 2008/03/09 05:36:55 dtucker Exp $ */
2d95e11bfSDag-Erling Smørgrav 
34b17dab0SDag-Erling Smørgrav /*
44b17dab0SDag-Erling Smørgrav  *
54b17dab0SDag-Erling Smørgrav  * Copyright (c) 2001 Gert Doering.  All rights reserved.
6d4af9e69SDag-Erling Smørgrav  * Copyright (c) 2004,2005,2006 Darren Tucker.  All rights reserved.
74b17dab0SDag-Erling Smørgrav  *
84b17dab0SDag-Erling Smørgrav  * Redistribution and use in source and binary forms, with or without
94b17dab0SDag-Erling Smørgrav  * modification, are permitted provided that the following conditions
104b17dab0SDag-Erling Smørgrav  * are met:
114b17dab0SDag-Erling Smørgrav  * 1. Redistributions of source code must retain the above copyright
124b17dab0SDag-Erling Smørgrav  *    notice, this list of conditions and the following disclaimer.
134b17dab0SDag-Erling Smørgrav  * 2. Redistributions in binary form must reproduce the above copyright
144b17dab0SDag-Erling Smørgrav  *    notice, this list of conditions and the following disclaimer in the
154b17dab0SDag-Erling Smørgrav  *    documentation and/or other materials provided with the distribution.
164b17dab0SDag-Erling Smørgrav  *
174b17dab0SDag-Erling Smørgrav  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
184b17dab0SDag-Erling Smørgrav  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
194b17dab0SDag-Erling Smørgrav  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
204b17dab0SDag-Erling Smørgrav  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
214b17dab0SDag-Erling Smørgrav  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
224b17dab0SDag-Erling Smørgrav  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
234b17dab0SDag-Erling Smørgrav  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
244b17dab0SDag-Erling Smørgrav  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
254b17dab0SDag-Erling Smørgrav  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
264b17dab0SDag-Erling Smørgrav  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
274b17dab0SDag-Erling Smørgrav  */
284b17dab0SDag-Erling Smørgrav 
2983d2307dSDag-Erling Smørgrav #ifdef _AIX
30d0c8c0bcSDag-Erling Smørgrav 
315e8dbd04SDag-Erling Smørgrav #ifdef HAVE_SYS_SOCKET_H
325e8dbd04SDag-Erling Smørgrav # include <sys/socket.h>
335e8dbd04SDag-Erling Smørgrav #endif
34d95e11bfSDag-Erling Smørgrav 
355e8dbd04SDag-Erling Smørgrav #include "buffer.h"
365e8dbd04SDag-Erling Smørgrav 
375e8dbd04SDag-Erling Smørgrav /* These should be in the system headers but are not. */
385e8dbd04SDag-Erling Smørgrav int usrinfo(int, char *, int);
39043840dfSDag-Erling Smørgrav #if defined(HAVE_DECL_SETAUTHDB) && (HAVE_DECL_SETAUTHDB == 0)
405e8dbd04SDag-Erling Smørgrav int setauthdb(const char *, char *);
414518870cSDag-Erling Smørgrav #endif
425e8dbd04SDag-Erling Smørgrav /* these may or may not be in the headers depending on the version */
43043840dfSDag-Erling Smørgrav #if defined(HAVE_DECL_AUTHENTICATE) && (HAVE_DECL_AUTHENTICATE == 0)
445e8dbd04SDag-Erling Smørgrav int authenticate(char *, char *, int *, char **);
455e8dbd04SDag-Erling Smørgrav #endif
46043840dfSDag-Erling Smørgrav #if defined(HAVE_DECL_LOGINFAILED) && (HAVE_DECL_LOGINFAILED == 0)
475e8dbd04SDag-Erling Smørgrav int loginfailed(char *, char *, char *);
485e8dbd04SDag-Erling Smørgrav #endif
49043840dfSDag-Erling Smørgrav #if defined(HAVE_DECL_LOGINRESTRICTIONS) && (HAVE_DECL_LOGINRESTRICTIONS == 0)
505e8dbd04SDag-Erling Smørgrav int loginrestrictions(char *, int, char *, char **);
515e8dbd04SDag-Erling Smørgrav #endif
52043840dfSDag-Erling Smørgrav #if defined(HAVE_DECL_LOGINSUCCESS) && (HAVE_DECL_LOGINSUCCESS == 0)
535e8dbd04SDag-Erling Smørgrav int loginsuccess(char *, char *, char *, char **);
545e8dbd04SDag-Erling Smørgrav #endif
55043840dfSDag-Erling Smørgrav #if defined(HAVE_DECL_PASSWDEXPIRED) && (HAVE_DECL_PASSWDEXPIRED == 0)
565e8dbd04SDag-Erling Smørgrav int passwdexpired(char *, char **);
575e8dbd04SDag-Erling Smørgrav #endif
585e8dbd04SDag-Erling Smørgrav 
59d95e11bfSDag-Erling Smørgrav /* Some versions define r_type in the above headers, which causes a conflict */
60d95e11bfSDag-Erling Smørgrav #ifdef r_type
61d95e11bfSDag-Erling Smørgrav # undef r_type
62d95e11bfSDag-Erling Smørgrav #endif
63d95e11bfSDag-Erling Smørgrav 
64d0c8c0bcSDag-Erling Smørgrav /* AIX 4.2.x doesn't have nanosleep but does have nsleep which is equivalent */
65d0c8c0bcSDag-Erling Smørgrav #if !defined(HAVE_NANOSLEEP) && defined(HAVE_NSLEEP)
66d0c8c0bcSDag-Erling Smørgrav # define nanosleep(a,b) nsleep(a,b)
67d0c8c0bcSDag-Erling Smørgrav #endif
68d0c8c0bcSDag-Erling Smørgrav 
69d0c8c0bcSDag-Erling Smørgrav /* For struct timespec on AIX 4.2.x */
70d0c8c0bcSDag-Erling Smørgrav #ifdef HAVE_SYS_TIMERS_H
71d0c8c0bcSDag-Erling Smørgrav # include <sys/timers.h>
72d0c8c0bcSDag-Erling Smørgrav #endif
73d0c8c0bcSDag-Erling Smørgrav 
74efcad6b7SDag-Erling Smørgrav /*
75efcad6b7SDag-Erling Smørgrav  * According to the setauthdb man page, AIX password registries must be 15
76efcad6b7SDag-Erling Smørgrav  * chars or less plus terminating NUL.
77efcad6b7SDag-Erling Smørgrav  */
78efcad6b7SDag-Erling Smørgrav #ifdef HAVE_SETAUTHDB
79efcad6b7SDag-Erling Smørgrav # define REGISTRY_SIZE	16
80d95e11bfSDag-Erling Smørgrav #endif
81d95e11bfSDag-Erling Smørgrav 
82d95e11bfSDag-Erling Smørgrav void aix_usrinfo(struct passwd *);
83efcad6b7SDag-Erling Smørgrav 
84efcad6b7SDag-Erling Smørgrav #ifdef WITH_AIXAUTHENTICATE
85efcad6b7SDag-Erling Smørgrav # define CUSTOM_SYS_AUTH_PASSWD 1
86d74d50a8SDag-Erling Smørgrav # define CUSTOM_SYS_AUTH_ALLOWED_USER 1
875e8dbd04SDag-Erling Smørgrav int sys_auth_allowed_user(struct passwd *, Buffer *);
88d74d50a8SDag-Erling Smørgrav # define CUSTOM_SYS_AUTH_RECORD_LOGIN 1
895e8dbd04SDag-Erling Smørgrav int sys_auth_record_login(const char *, const char *, const char *, Buffer *);
90efcad6b7SDag-Erling Smørgrav # define CUSTOM_FAILED_LOGIN 1
91efcad6b7SDag-Erling Smørgrav #endif
92efcad6b7SDag-Erling Smørgrav 
93efcad6b7SDag-Erling Smørgrav void aix_setauthdb(const char *);
94efcad6b7SDag-Erling Smørgrav void aix_restoreauthdb(void);
95d95e11bfSDag-Erling Smørgrav void aix_remove_embedded_newlines(char *);
965e8dbd04SDag-Erling Smørgrav 
975e8dbd04SDag-Erling Smørgrav #if defined(AIX_GETNAMEINFO_HACK) && !defined(BROKEN_GETADDRINFO)
985e8dbd04SDag-Erling Smørgrav # ifdef getnameinfo
995e8dbd04SDag-Erling Smørgrav #  undef getnameinfo
1005e8dbd04SDag-Erling Smørgrav # endif
1015e8dbd04SDag-Erling Smørgrav int sshaix_getnameinfo(const struct sockaddr *, size_t, char *, size_t,
1025e8dbd04SDag-Erling Smørgrav     char *, size_t, int);
1035e8dbd04SDag-Erling Smørgrav # define getnameinfo(a,b,c,d,e,f,g) (sshaix_getnameinfo(a,b,c,d,e,f,g))
1045e8dbd04SDag-Erling Smørgrav #endif
1055e8dbd04SDag-Erling Smørgrav 
106d4af9e69SDag-Erling Smørgrav /*
107d4af9e69SDag-Erling Smørgrav  * We use getgrset in preference to multiple getgrent calls for efficiency
108d4af9e69SDag-Erling Smørgrav  * plus it supports NIS and LDAP groups.
109d4af9e69SDag-Erling Smørgrav  */
110d4af9e69SDag-Erling Smørgrav #if !defined(HAVE_GETGROUPLIST) && defined(HAVE_GETGRSET)
111d4af9e69SDag-Erling Smørgrav # define HAVE_GETGROUPLIST
112d4af9e69SDag-Erling Smørgrav # define USE_GETGRSET
113d4af9e69SDag-Erling Smørgrav int getgrouplist(const char *, gid_t, gid_t *, int *);
114d4af9e69SDag-Erling Smørgrav #endif
115d4af9e69SDag-Erling Smørgrav 
11683d2307dSDag-Erling Smørgrav #endif /* _AIX */
117