diff options
Diffstat (limited to 'openbsd-compat/port-aix.c')
-rw-r--r-- | openbsd-compat/port-aix.c | 91 |
1 files changed, 3 insertions, 88 deletions
diff --git a/openbsd-compat/port-aix.c b/openbsd-compat/port-aix.c index 7a981634b..4c96a3171 100644 --- a/openbsd-compat/port-aix.c +++ b/openbsd-compat/port-aix.c | |||
@@ -24,17 +24,11 @@ | |||
24 | * | 24 | * |
25 | */ | 25 | */ |
26 | #include "includes.h" | 26 | #include "includes.h" |
27 | #include "ssh.h" | ||
28 | #include "log.h" | ||
29 | #include "servconf.h" | ||
30 | 27 | ||
31 | #ifdef _AIX | 28 | #ifdef _AIX |
32 | 29 | ||
33 | #include <uinfo.h> | 30 | #include <uinfo.h> |
34 | #include <../xmalloc.h> | 31 | #include <../xmalloc.h> |
35 | #include "port-aix.h" | ||
36 | |||
37 | extern ServerOptions options; | ||
38 | 32 | ||
39 | /* | 33 | /* |
40 | * AIX has a "usrinfo" area where logname and other stuff is stored - | 34 | * AIX has a "usrinfo" area where logname and other stuff is stored - |
@@ -47,95 +41,16 @@ void | |||
47 | aix_usrinfo(struct passwd *pw) | 41 | aix_usrinfo(struct passwd *pw) |
48 | { | 42 | { |
49 | u_int i; | 43 | u_int i; |
50 | size_t len; | ||
51 | char *cp; | 44 | char *cp; |
52 | 45 | ||
53 | len = sizeof("LOGNAME= NAME= ") + (2 * strlen(pw->pw_name)); | 46 | cp = xmalloc(16 + 2 * strlen(pw->pw_name)); |
54 | cp = xmalloc(len); | 47 | i = sprintf(cp, "LOGNAME=%s%cNAME=%s%c", pw->pw_name, 0, |
55 | 48 | pw->pw_name, 0); | |
56 | i = snprintf(cp, len, "LOGNAME=%s%cNAME=%s%c", pw->pw_name, '\0', | ||
57 | pw->pw_name, '\0'); | ||
58 | if (usrinfo(SETUINFO, cp, i) == -1) | 49 | if (usrinfo(SETUINFO, cp, i) == -1) |
59 | fatal("Couldn't set usrinfo: %s", strerror(errno)); | 50 | fatal("Couldn't set usrinfo: %s", strerror(errno)); |
60 | debug3("AIX/UsrInfo: set len %d", i); | 51 | debug3("AIX/UsrInfo: set len %d", i); |
61 | |||
62 | xfree(cp); | 52 | xfree(cp); |
63 | } | 53 | } |
64 | 54 | ||
65 | #ifdef WITH_AIXAUTHENTICATE | ||
66 | /* | ||
67 | * Remove embedded newlines in string (if any). | ||
68 | * Used before logging messages returned by AIX authentication functions | ||
69 | * so the message is logged on one line. | ||
70 | */ | ||
71 | void | ||
72 | aix_remove_embedded_newlines(char *p) | ||
73 | { | ||
74 | if (p == NULL) | ||
75 | return; | ||
76 | |||
77 | for (; *p; p++) { | ||
78 | if (*p == '\n') | ||
79 | *p = ' '; | ||
80 | } | ||
81 | /* Remove trailing whitespace */ | ||
82 | if (*--p == ' ') | ||
83 | *p = '\0'; | ||
84 | } | ||
85 | #endif /* WITH_AIXAUTHENTICATE */ | ||
86 | |||
87 | # ifdef CUSTOM_FAILED_LOGIN | ||
88 | /* | ||
89 | * record_failed_login: generic "login failed" interface function | ||
90 | */ | ||
91 | void | ||
92 | record_failed_login(const char *user, const char *ttyname) | ||
93 | { | ||
94 | char *hostname = get_canonical_hostname(options.use_dns); | ||
95 | |||
96 | if (geteuid() != 0) | ||
97 | return; | ||
98 | |||
99 | aix_setauthdb(user); | ||
100 | # ifdef AIX_LOGINFAILED_4ARG | ||
101 | loginfailed((char *)user, hostname, (char *)ttyname, AUDIT_FAIL_AUTH); | ||
102 | # else | ||
103 | loginfailed((char *)user, hostname, (char *)ttyname); | ||
104 | # endif | ||
105 | } | ||
106 | |||
107 | /* | ||
108 | * If we have setauthdb, retrieve the password registry for the user's | ||
109 | * account then feed it to setauthdb. This may load registry-specific method | ||
110 | * code. If we don't have setauthdb or have already called it this is a no-op. | ||
111 | */ | ||
112 | void | ||
113 | aix_setauthdb(const char *user) | ||
114 | { | ||
115 | # ifdef HAVE_SETAUTHDB | ||
116 | static char *registry = NULL; | ||
117 | |||
118 | if (registry != NULL) /* have already done setauthdb */ | ||
119 | return; | ||
120 | |||
121 | if (setuserdb(S_READ) == -1) { | ||
122 | debug3("%s: Could not open userdb to read", __func__); | ||
123 | return; | ||
124 | } | ||
125 | |||
126 | if (getuserattr((char *)user, S_REGISTRY, ®istry, SEC_CHAR) == 0) { | ||
127 | if (setauthdb(registry, NULL) == 0) | ||
128 | debug3("%s: AIX/setauthdb set registry %s", __func__, | ||
129 | registry); | ||
130 | else | ||
131 | debug3("%s: AIX/setauthdb set registry %s failed: %s", | ||
132 | __func__, registry, strerror(errno)); | ||
133 | } else | ||
134 | debug3("%s: Could not read S_REGISTRY for user: %s", __func__, | ||
135 | strerror(errno)); | ||
136 | enduserdb(); | ||
137 | # endif | ||
138 | } | ||
139 | # endif /* CUSTOM_FAILED_LOGIN */ | ||
140 | #endif /* _AIX */ | 55 | #endif /* _AIX */ |
141 | 56 | ||