blob: 26b62aadf6db0f98027a54f219683ad99e46f31f [file] [log] [blame]
Damien Miller92ddb7d2001-02-14 01:25:23 +11001#include "includes.h"
2
3#ifdef HAVE_OSF_SIA
4#include "ssh.h"
Kevin Steves6939b232002-04-10 16:09:51 +00005#include "auth.h"
Damien Miller92ddb7d2001-02-14 01:25:23 +11006#include "auth-sia.h"
7#include "log.h"
8#include "servconf.h"
9#include "canohost.h"
10
11#include <sia.h>
12#include <siad.h>
13#include <pwd.h>
14#include <signal.h>
15#include <setjmp.h>
16#include <sys/resource.h>
17#include <unistd.h>
18#include <string.h>
19
20extern ServerOptions options;
21extern int saved_argc;
22extern char **saved_argv;
23
24extern int errno;
25
26int
Kevin Stevese683e762002-04-04 19:02:28 +000027auth_sia_password(Authctxt *authctxt, char *pass)
Damien Miller92ddb7d2001-02-14 01:25:23 +110028{
29 int ret;
30 SIAENTITY *ent = NULL;
31 const char *host;
Kevin Stevese683e762002-04-04 19:02:28 +000032 char *user = authctxt->user;
Damien Miller92ddb7d2001-02-14 01:25:23 +110033
Damien Millerf3451a22002-02-05 12:40:46 +110034 host = get_canonical_hostname(options.verify_reverse_mapping);
Damien Miller92ddb7d2001-02-14 01:25:23 +110035
Kevin Stevese683e762002-04-04 19:02:28 +000036 if (!user || !pass || pass[0] == '\0')
Damien Miller92ddb7d2001-02-14 01:25:23 +110037 return(0);
38
39 if (sia_ses_init(&ent, saved_argc, saved_argv, host, user, NULL, 0,
40 NULL) != SIASUCCESS)
41 return(0);
42
43 if ((ret = sia_ses_authent(NULL, pass, ent)) != SIASUCCESS) {
Kevin Steves0c283d82002-04-11 20:39:40 +000044 error("Couldn't authenticate %s from %s", user, host);
Damien Miller92ddb7d2001-02-14 01:25:23 +110045 if (ret & SIASTOP)
46 sia_ses_release(&ent);
47 return(0);
48 }
49
50 sia_ses_release(&ent);
51
52 return(1);
53}
54
55void
56session_setup_sia(char *user, char *tty)
57{
Damien Miller92ddb7d2001-02-14 01:25:23 +110058 struct passwd *pw;
59 SIAENTITY *ent = NULL;
60 const char *host;
61
Damien Millerf3451a22002-02-05 12:40:46 +110062 host = get_canonical_hostname (options.verify_reverse_mapping);
Damien Miller92ddb7d2001-02-14 01:25:23 +110063
64 if (sia_ses_init(&ent, saved_argc, saved_argv, host, user, tty, 0,
Damien Miller364a9bd2001-04-16 18:37:05 +100065 NULL) != SIASUCCESS) {
Kevin Steves0c283d82002-04-11 20:39:40 +000066 fatal("sia_ses_init failed");
Damien Miller364a9bd2001-04-16 18:37:05 +100067 }
Damien Miller92ddb7d2001-02-14 01:25:23 +110068
69 if ((pw = getpwnam(user)) == NULL) {
70 sia_ses_release(&ent);
Kevin Steves0c283d82002-04-11 20:39:40 +000071 fatal("getpwnam: no user: %s", user);
Damien Miller92ddb7d2001-02-14 01:25:23 +110072 }
73 if (sia_make_entity_pwd(pw, ent) != SIASUCCESS) {
74 sia_ses_release(&ent);
Kevin Steves0c283d82002-04-11 20:39:40 +000075 fatal("sia_make_entity_pwd failed");
Damien Miller92ddb7d2001-02-14 01:25:23 +110076 }
77
78 ent->authtype = SIA_A_NONE;
Damien Miller364a9bd2001-04-16 18:37:05 +100079 if (sia_ses_estab(sia_collect_trm, ent) != SIASUCCESS) {
Kevin Steves0c283d82002-04-11 20:39:40 +000080 fatal("Couldn't establish session for %s from %s", user,
Damien Miller92ddb7d2001-02-14 01:25:23 +110081 host);
Damien Miller364a9bd2001-04-16 18:37:05 +100082 }
Damien Miller92ddb7d2001-02-14 01:25:23 +110083
84 if (setpriority(PRIO_PROCESS, 0, 0) == -1) {
85 sia_ses_release(&ent);
Kevin Steves0c283d82002-04-11 20:39:40 +000086 fatal("setpriority: %s", strerror (errno));
Damien Miller92ddb7d2001-02-14 01:25:23 +110087 }
88
Damien Miller364a9bd2001-04-16 18:37:05 +100089 if (sia_ses_launch(sia_collect_trm, ent) != SIASUCCESS) {
Kevin Steves0c283d82002-04-11 20:39:40 +000090 fatal("Couldn't launch session for %s from %s", user, host);
Damien Miller364a9bd2001-04-16 18:37:05 +100091 }
Damien Miller92ddb7d2001-02-14 01:25:23 +110092
93 sia_ses_release(&ent);
94
Damien Miller364a9bd2001-04-16 18:37:05 +100095 if (setreuid(geteuid(), geteuid()) < 0) {
Kevin Steves0c283d82002-04-11 20:39:40 +000096 fatal("setreuid: %s", strerror(errno));
Damien Miller364a9bd2001-04-16 18:37:05 +100097 }
Damien Miller92ddb7d2001-02-14 01:25:23 +110098}
99
100#endif /* HAVE_OSF_SIA */