/*
- * $Id: uam.c,v 1.19 2002-01-19 21:29:55 jmarcus Exp $
+ * $Id: uam.c,v 1.20 2002-02-13 16:44:59 srittau Exp $
*
* Copyright (c) 1999 Adrian Sun (asun@zoology.washington.edu)
* All Rights Reserved. See COPYRIGHT.
#ifdef TRU64
#include <netdb.h>
+#include <sia.h>
+#include <siad.h>
+#include <signal.h>
#endif /* TRU64 */
/* --- server uam functions -- */
{
afp_get_cmdline( ac, av );
}
+
+int uam_sia_validate_user(sia_collect_func_t * collect, int argc, char **argv,
+ char *hostname, char *username, char *tty,
+ int colinput, char *gssapi, char *passphrase)
+/* A clone of the Tru64 system function sia_validate_user() that calls
+ * sia_ses_authent() rather than sia_ses_reauthent()
+ * Added extra code to take into account suspected SIA bug whereby it clobbers
+ * the signal handler on SIGALRM (tickle) installed by Netatalk/afpd
+ */
+{
+ SIAENTITY *entity = NULL;
+ struct sigaction act;
+ int rc;
+
+ if ((rc=sia_ses_init(&entity, argc, argv, hostname, username, tty,
+ colinput, gssapi)) != SIASUCCESS) {
+ LOG(log_error, logtype_default, "cannot initialise SIA");
+ return SIAFAIL;
+ }
+
+ /* save old action for restoration later */
+ if (sigaction(SIGALRM, NULL, &act))
+ LOG(log_error, logtype_default, "cannot save SIGALRM handler");
+
+ if ((rc=sia_ses_authent(collect, passphrase, entity)) != SIASUCCESS) {
+ /* restore old action after clobbering by sia_ses_authent() */
+ if (sigaction(SIGALRM, &act, NULL))
+ LOG(log_error, logtype_default, "cannot restore SIGALRM handler");
+
+ LOG(log_info, logtype_default, "unsuccessful login for %s",
+(hostname?hostname:"(null)"));
+ return SIAFAIL;
+ }
+ LOG(log_info, logtype_default, "successful login for %s",
+(hostname?hostname:"(null)"));
+
+ /* restore old action after clobbering by sia_ses_authent() */
+ if (sigaction(SIGALRM, &act, NULL))
+ LOG(log_error, logtype_default, "cannot restore SIGALRM handler");
+
+ sia_ses_release(&entity);
+
+ return SIASUCCESS;
+}
#endif /* TRU64 */
/* --- papd-specific functions (just placeholders) --- */
/*
- * $Id: uams_dhx_passwd.c,v 1.14 2002-01-04 04:45:48 sibaz Exp $
+ * $Id: uams_dhx_passwd.c,v 1.15 2002-02-13 16:44:59 srittau Exp $
*
* Copyright (c) 1990,1993 Regents of The University of Michigan.
* Copyright (c) 1999 Adrian Sun (asun@u.washington.edu)
uam_afp_getcmdline( &ac, &av );
sprintf( hostname, "%s@%s", dhxpwd->pw_name, clientname );
- if( sia_validate_user( NULL, ac, av, hostname, dhxpwd->pw_name,
- NULL, FALSE, NULL, rbuf ) != SIASUCCESS )
+ if( uam_sia_validate_user( NULL, ac, av, hostname, dhxpwd->pw_name,
+ NULL, FALSE, NULL, rbuf ) != SIASUCCESS )
return AFPERR_NOTAUTH;
memset( rbuf, 0, PASSWDLEN );
/*
- * $Id: uams_passwd.c,v 1.15 2002-01-24 16:31:20 jmarcus Exp $
+ * $Id: uams_passwd.c,v 1.16 2002-02-13 16:44:59 srittau Exp $
*
* Copyright (c) 1990,1993 Regents of The University of Michigan.
* Copyright (c) 1999 Adrian Sun (asun@u.washington.edu)
uam_afp_getcmdline( &ac, &av );
sprintf( hostname, "%s@%s", username, clientname );
- if( sia_validate_user( NULL, ac, av, hostname, username,
- NULL, FALSE, NULL, ibuf ) != SIASUCCESS )
+ if( uams_sia_validate_user( NULL, ac, av, hostname, username,
+ NULL, FALSE, NULL, ibuf ) != SIASUCCESS )
return AFPERR_NOTAUTH;
return AFP_OK;
#include <pwd.h>
#include <stdarg.h>
+#ifdef TRU64
+#include <sia.h>
+#include <siad.h>
+#endif /* TRU64 */
+
/* just a label for exported bits */
#define UAM_MODULE_EXPORT
extern int uam_afpserver_option __P((void *, const int, void *, int *));
#ifdef TRU64
extern void uam_afp_getcmdline __P((int *, char ***));
+extern int uam_sia_validate_user __P((sia_collect_func_t *, int, char **,
+ char *, char *, char *, int, char *,
+ char *));
#endif /* TRU64 */
/* switch.c */