16 #include <sys/resource.h>
20 extern ServerOptions options;
21 extern int saved_argc;
22 extern char **saved_argv;
27 auth_sia_password(Authctxt *authctxt, char *pass)
30 SIAENTITY *ent = NULL;
32 char *user = authctxt->user;
34 host = get_canonical_hostname(options.verify_reverse_mapping);
36 if (!user || !pass || pass[0] == '\0')
39 if (sia_ses_init(&ent, saved_argc, saved_argv, host, user, NULL, 0,
43 if ((ret = sia_ses_authent(NULL, pass, ent)) != SIASUCCESS) {
44 error("Couldn't authenticate %s from %s", user, host);
46 sia_ses_release(&ent);
50 sia_ses_release(&ent);
56 session_setup_sia(char *user, char *tty)
59 SIAENTITY *ent = NULL;
62 host = get_canonical_hostname (options.verify_reverse_mapping);
64 if (sia_ses_init(&ent, saved_argc, saved_argv, host, user, tty, 0,
65 NULL) != SIASUCCESS) {
66 fatal("sia_ses_init failed");
69 if ((pw = getpwnam(user)) == NULL) {
70 sia_ses_release(&ent);
71 fatal("getpwnam: no user: %s", user);
73 if (sia_make_entity_pwd(pw, ent) != SIASUCCESS) {
74 sia_ses_release(&ent);
75 fatal("sia_make_entity_pwd failed");
78 ent->authtype = SIA_A_NONE;
79 if (sia_ses_estab(sia_collect_trm, ent) != SIASUCCESS) {
80 fatal("Couldn't establish session for %s from %s", user,
84 if (setpriority(PRIO_PROCESS, 0, 0) == -1) {
85 sia_ses_release(&ent);
86 fatal("setpriority: %s", strerror (errno));
89 if (sia_ses_launch(sia_collect_trm, ent) != SIASUCCESS) {
90 fatal("Couldn't launch session for %s from %s", user, host);
93 sia_ses_release(&ent);
95 if (setreuid(geteuid(), geteuid()) < 0) {
96 fatal("setreuid: %s", strerror(errno));
100 #endif /* HAVE_OSF_SIA */