source: trunk/third/openssh/auth-sia.c @ 16801

Revision 16801, 2.1 KB checked in by ghudson, 23 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r16800, which included commits to RCS files with non-trunk default branches.
Line 
1#include "includes.h"
2
3#ifdef HAVE_OSF_SIA
4#include "ssh.h"
5#include "auth-sia.h"
6#include "log.h"
7#include "servconf.h"
8#include "canohost.h"
9
10#include <sia.h>
11#include <siad.h>
12#include <pwd.h>
13#include <signal.h>
14#include <setjmp.h>
15#include <sys/resource.h>
16#include <unistd.h>
17#include <string.h>
18
19extern ServerOptions options;
20extern int saved_argc;
21extern char **saved_argv;
22
23extern int errno;
24
25int
26auth_sia_password(char *user, char *pass)
27{
28        int ret;
29        SIAENTITY *ent = NULL;
30        const char *host;
31
32        host = get_canonical_hostname(options.reverse_mapping_check);
33
34        if (!user || !pass)
35                return(0);
36
37        if (sia_ses_init(&ent, saved_argc, saved_argv, host, user, NULL, 0,
38            NULL) != SIASUCCESS)
39                return(0);
40
41        if ((ret = sia_ses_authent(NULL, pass, ent)) != SIASUCCESS) {
42                error("couldn't authenticate %s from %s", user, host);
43                if (ret & SIASTOP)
44                        sia_ses_release(&ent);
45                return(0);
46        }
47
48        sia_ses_release(&ent);
49
50        return(1);
51}
52
53void
54session_setup_sia(char *user, char *tty)
55{
56        int ret;
57        struct passwd *pw;
58        SIAENTITY *ent = NULL;
59        const char *host;
60
61        host = get_canonical_hostname (options.reverse_mapping_check);
62
63        if (sia_ses_init(&ent, saved_argc, saved_argv, host, user, tty, 0,
64            NULL) != SIASUCCESS) {
65                error("sia_ses_init failed");
66                exit(1);
67        }
68
69        if ((pw = getpwnam(user)) == NULL) {
70                sia_ses_release(&ent);
71                error("getpwnam(%s) failed: %s", user, strerror(errno));
72                exit(1);
73        }
74        if (sia_make_entity_pwd(pw, ent) != SIASUCCESS) {
75                sia_ses_release(&ent);
76                error("sia_make_entity_pwd failed");
77                exit(1);
78        }
79
80        ent->authtype = SIA_A_NONE;
81        if (sia_ses_estab(sia_collect_trm, ent) != SIASUCCESS) {
82                error("couldn't establish session for %s from %s", user,
83                    host);
84                exit(1);
85        }
86
87        if (setpriority(PRIO_PROCESS, 0, 0) == -1) {
88                sia_ses_release(&ent);
89                error("setpriority failed: %s", strerror (errno));
90                exit(1);
91        }
92
93        if (sia_ses_launch(sia_collect_trm, ent) != SIASUCCESS) {
94                error("couldn't launch session for %s from %s", user, host);
95                exit(1);
96        }
97       
98        sia_ses_release(&ent);
99
100        if (setreuid(geteuid(), geteuid()) < 0) {
101                error("setreuid failed: %s", strerror (errno));
102                exit(1);
103        }
104}
105
106#endif /* HAVE_OSF_SIA */
107
Note: See TracBrowser for help on using the repository browser.