/*
- * $Id: uams_pam.c,v 1.6 2001-02-27 17:07:43 rufustfirefly Exp $
+ * $Id: uams_pam.c,v 1.11 2002-01-04 04:45:48 sibaz Exp $
*
* Copyright (c) 1990,1993 Regents of The University of Michigan.
* Copyright (c) 1999 Adrian Sun (asun@u.washington.edu)
#ifdef HAVE_CONFIG_H
#include "config.h"
-#endif
+#endif /* HAVE_CONFIG_H */
-#ifdef USE_PAM
#include <stdio.h>
#include <stdlib.h>
+#ifdef HAVE_UNISTD_H
#include <unistd.h>
+#endif /* HAVE_UNISTD_H */
+
+/* STDC check */
+#if STDC_HEADERS
#include <string.h>
-#include <syslog.h>
+#else /* STDC_HEADERS */
+#ifndef HAVE_STRCHR
+#define strchr index
+#define strrchr index
+#endif /* HAVE_STRCHR */
+char *strchr (), *strrchr ();
+#ifndef HAVE_MEMCPY
+#define memcpy(d,s,n) bcopy ((s), (d), (n))
+#define memmove(d,s,n) bcopy ((s), (d), (n))
+#endif /* ! HAVE_MEMCPY */
+#endif /* STDC_HEADERS */
+
+#include <atalk/logger.h>
#include <security/pam_appl.h>
case PAM_TEXT_INFO:
#ifdef PAM_BINARY_PROMPT
case PAM_BINARY_PROMPT:
-#endif
+#endif /* PAM_BINARY_PROMPT */
/* ignore it... */
break;
case PAM_ERROR_MSG:
(void *) &username, &ulen) < 0)
return AFPERR_MISC;
- if (uam_afpserver_option(obj, UAM_OPTION_HOSTNAME,
+ if (uam_afpserver_option(obj, UAM_OPTION_CLIENTNAME,
(void *) &hostname, NULL) < 0)
- return AFPERR_MISC;
+ {
+ LOG(log_info, logtype_default, "uams_pam.c :PAM: unable to retrieve client hostname");
+ hostname = NULL;
+ }
+
len = (unsigned char) *ibuf++;
if ( len > ulen ) {
return AFPERR_PARAM;
}
- syslog(LOG_INFO, "cleartext login: %s", username);
+ LOG(log_info, logtype_default, "cleartext login: %s", username);
PAM_username = username;
PAM_password = ibuf; /* Set these things up for the conv function */
#ifdef PAM_AUTHTOKEN_REQD
else if (PAM_error == PAM_AUTHTOKEN_REQD)
err = AFPERR_PWDCHNG;
-#endif
+#endif /* PAM_AUTHTOKEN_REQD */
goto login_err;
}
#ifndef PAM_CRED_ESTABLISH
#define PAM_CRED_ESTABLISH PAM_ESTABLISH_CRED
-#endif
+#endif /* PAM_CRED_ESTABLISH */
PAM_error = pam_setcred(pamh, PAM_CRED_ESTABLISH);
if (PAM_error != PAM_SUCCESS)
goto login_err;
/* Parse input for username in () */
if ((p = strchr(data, '(' )) == NULL) {
- syslog(LOG_INFO,"Bad Login ClearTxtUAM: username not found in string");
+ LOG(log_info, logtype_default,"Bad Login ClearTxtUAM: username not found in string");
free(data);
return(-1);
}
p++;
if ((q = strstr(data, ") (" )) == NULL) {
- syslog(LOG_INFO,"Bad Login ClearTxtUAM: username not found in string");
+ LOG(log_info, logtype_default,"Bad Login ClearTxtUAM: username not found in string");
free(data);
return(-1);
}
/* Parse input for password in next () */
p = q + 3;
if ((q = strrchr(data, ')' )) == NULL) {
- syslog(LOG_INFO,"Bad Login ClearTxtUAM: password not found in string");
+ LOG(log_info, logtype_default,"Bad Login ClearTxtUAM: password not found in string");
free(data);
return(-1);
}
PAM_error = pam_start("netatalk", username, &PAM_conversation,
&pamh);
if (PAM_error != PAM_SUCCESS) {
- syslog(LOG_INFO, "Bad Login ClearTxtUAM: %s: %s",
+ LOG(log_info, logtype_default, "Bad Login ClearTxtUAM: %s: %s",
username, pam_strerror(pamh, PAM_error));
pam_end(pamh, PAM_error);
pamh = NULL;
pam_set_item(pamh, PAM_RHOST, hostname);
PAM_error = pam_authenticate(pamh,0);
if (PAM_error != PAM_SUCCESS) {
- syslog(LOG_INFO, "Bad Login ClearTxtUAM: %s: %s",
+ LOG(log_info, logtype_default, "Bad Login ClearTxtUAM: %s: %s",
username, pam_strerror(pamh, PAM_error));
pam_end(pamh, PAM_error);
pamh = NULL;
PAM_error = pam_acct_mgmt(pamh, 0);
if (PAM_error != PAM_SUCCESS) {
- syslog(LOG_INFO, "Bad Login ClearTxtUAM: %s: %s",
+ LOG(log_info, logtype_default, "Bad Login ClearTxtUAM: %s: %s",
username, pam_strerror(pamh, PAM_error));
pam_end(pamh, PAM_error);
pamh = NULL;
PAM_error = pam_open_session(pamh, 0);
if (PAM_error != PAM_SUCCESS) {
- syslog(LOG_INFO, "Bad Login ClearTxtUAM: %s: %s",
+ LOG(log_info, logtype_default, "Bad Login ClearTxtUAM: %s: %s",
username, pam_strerror(pamh, PAM_error));
pam_end(pamh, PAM_error);
pamh = NULL;
/* Login successful, but no need to hang onto it,
so logout immediately */
append(out, loginok, strlen(loginok));
- syslog(LOG_INFO, "Login ClearTxtUAM: %s", username);
+ LOG(log_info, logtype_default, "Login ClearTxtUAM: %s", username);
pam_close_session(pamh, 0);
pam_end(pamh, 0);
pamh = NULL;
uam_setup, uam_cleanup
};
-#endif /* USE_PAM */
+UAM_MODULE_EXPORT struct uam_export uams_pam = {
+ UAM_MODULE_SERVER,
+ UAM_MODULE_VERSION,
+ uam_setup, uam_cleanup
+};