aix-lam-20060712
[openafs.git] / src / tsm41 / aix_auth_common.c
1 /*
2  * Copyright 2000, International Business Machines Corporation and others.
3  * All Rights Reserved.
4  * 
5  * This software has been released under the terms of the IBM Public
6  * License.  For details, see the LICENSE file in the top-level source
7  * directory or online at http://www.openafs.org/dl/license10.html
8  */
9
10 #include <afsconfig.h>
11 #include <afs/param.h>
12
13 RCSID
14     ("$Header$");
15
16 #if defined(AFS_AIX41_ENV)
17 #include <sys/types.h>
18 #include <sys/param.h>
19 #include <stdio.h>
20 #include <locale.h>
21 #include <nl_types.h>
22 #include <pwd.h>
23 #include <netdb.h>
24 #include <sys/socket.h>
25 #include <sys/file.h>
26 #include <errno.h>
27 #include <usersec.h>
28
29 #include <afs/kauth.h>
30 #include <afs/kautils.h>
31
32 #include "aix_auth_prototypes.h"
33
34 int
35 afs_authenticate(char *userName, char *response, int *reenter, char **message)
36 {
37     char *reason, *pword, prompt[256];
38     struct passwd *pwd;
39     int code, unixauthneeded, password_expires = -1;
40
41     *reenter = 0;
42     *message = (char *)0;
43     if (response) {
44         pword = response;
45     } else {
46         sprintf(prompt, "Enter AFS password for %s: ", userName);
47         pword = getpass(prompt);
48         if (strlen(pword) == 0) {
49             printf
50                 ("Unable to read password because zero length passord is illegal\n");
51             *message = (char *)malloc(256);
52             sprintf(*message,
53                     "Unable to read password because zero length passord is illegal\n");
54             return AUTH_FAILURE;
55         }
56     }
57
58     if ((pwd = getpwnam(userName)) == NULL) {
59         *message = (char *)malloc(256);
60         sprintf(*message, "getpwnam for user failed\n");
61         return AUTH_FAILURE;
62     }
63
64     if (code =
65         ka_UserAuthenticateGeneral(KA_USERAUTH_VERSION + KA_USERAUTH_DOSETPAG,
66                                    userName, (char *)0, (char *)0, pword, 0,
67                                    &password_expires, 0, &reason)) {
68         if (code == KANOENT)
69             return AUTH_NOTFOUND;
70         *message = (char *)malloc(1024);
71         sprintf(*message, "Unable to authenticate to AFS because %s.\n",
72                 reason);
73         return AUTH_FAILURE;
74     }
75     aix_ktc_setup_ticket_file(userName);
76     return AUTH_SUCCESS;
77 }
78
79 int
80 afs_chpass(char *userName, char *oldPasswd, char *newPasswd, char **message)
81 {
82     return AUTH_SUCCESS;
83 }
84
85 int
86 afs_passwdexpired(char *userName, char **message)
87 {
88     return AUTH_SUCCESS;
89 }
90
91 int
92 afs_passwdrestrictions(char *userName, char *newPasswd, char *oldPasswd,
93                        char **message)
94 {
95     return AUTH_SUCCESS;
96 }
97
98 char *
99 afs_getpasswd(char * userName)
100 {
101     errno = ENOSYS;
102     return NULL;
103 }
104
105 #endif /* AFS_AIX41_ENV */