Standardize License information
[openafs.git] / src / tsm41 / aix41_auth.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 <afs/param.h>
11 #if defined(AFS_AIX41_ENV)
12 #include <sys/types.h>
13 #include <sys/param.h>
14 #include <stdio.h>
15 #include <locale.h>
16 #include <nl_types.h>
17 #include <pwd.h>
18 #include <netdb.h>
19 #include <sys/socket.h>
20 #include <sys/file.h>
21 #include <errno.h>
22 #include <usersec.h>
23
24 #include <afs/kauth.h>
25 #include <afs/kautils.h>
26
27
28 int afs_authenticate (char *userName, char *response, int  *reenter, char **message) {
29     char *reason, *pword, prompt[256];
30     struct passwd *pwd;
31     int code, unixauthneeded, password_expires = -1;
32
33     *reenter = 0;
34     *message = (char *)0;
35     if (response) {
36         pword = response;
37     } else {
38         sprintf(prompt,"Enter AFS password for %s: ",userName);
39         pword=getpass(prompt);
40         if(strlen(pword)==0) {
41             printf("Unable to read password because zero length passord is illegal\n");
42             *message = (char *)malloc(256);
43             sprintf(*message, "Unable to read password because zero length passord is illegal\n");          
44             return AUTH_FAILURE;
45         }
46     }
47     if ((pwd = getpwnam(userName)) == NULL){
48         *message = (char *)malloc(256);
49         sprintf(*message, "getpwnam for user failed\n");
50         return AUTH_FAILURE;
51     }
52     if (code = ka_UserAuthenticateGeneral(KA_USERAUTH_VERSION + KA_USERAUTH_DOSETPAG, userName, 
53                                           (char *)0, (char *)0, pword, 0, &password_expires, 0, &reason)) {
54         if (code == KANOENT) 
55             return AUTH_NOTFOUND;       
56         *message = (char *)malloc(1024);
57         sprintf(*message, "Unable to authenticate to AFS because %s.\n", reason);
58         return AUTH_FAILURE;
59     }
60 #if defined(AFS_KERBEROS_ENV)
61         setup_ticket_file(userName);
62 #endif
63     return AUTH_SUCCESS;
64 }
65  
66 int afs_chpass (char *userName, char *oldPasswd, char *newPasswd, char **message) {
67     return AUTH_SUCCESS;
68 }
69
70 int afs_passwdexpired (char *userName, char **message) {
71     return AUTH_SUCCESS;
72 }
73
74 int afs_passwdrestrictions (char *userName, char *newPasswd, char *oldPasswd, char **message) {
75     return AUTH_SUCCESS;
76 }
77
78 int afs_getgrset (char *userName) {
79     return NULL;
80 }
81
82 int afs_getgrgid (int id) {
83     return NULL;
84 }
85
86 int afs_getgrnam (char *name) {
87     return NULL;
88 }
89
90 int afs_getpwnam(int id)
91 {
92     return NULL;
93 }
94
95 int afs_getpwuid(char *name)
96 {
97     return NULL;
98 }
99
100 int afs_initialize(struct secmethod_table *meths) {
101     /*
102      * Initialize kauth package here so we don't have to call it
103      * each time we call the authenticate routine.      
104      */
105     ka_Init(0);
106     bzero(meths, sizeof(struct secmethod_table));
107     /*
108      * Initialize the exported interface routines. Except the authenticate one
109      * the others are currently mainly noops.
110      */
111     meths->method_chpass = afs_chpass;
112     meths->method_authenticate = afs_authenticate;
113     meths->method_passwdexpired = afs_passwdexpired;
114     meths->method_passwdrestrictions = afs_passwdrestrictions;
115     /*
116      * These we need to bring in because, for afs users, /etc/security/user's
117      * "registry" must non-local (i.e. DCE) since otherwise it assumes it's a
118      * local domain and uses valid_crypt(passwd) to validate the afs passwd
119      * which, of course, will fail. NULL return from these routine simply
120      * means use the local version ones after all.
121      */
122     meths->method_getgrgid  = afs_getgrgid;
123     meths->method_getgrset  = afs_getgrset;
124     meths->method_getgrnam  = afs_getgrnam;
125     meths->method_getpwnam  = afs_getpwnam;
126     meths->method_getpwuid  = afs_getpwuid;
127     return(0);
128 }
129
130 #if defined(AFS_KERBEROS_ENV)
131
132 setup_ticket_file(userName)
133 char*   userName;
134 {
135         extern char*    ktc_tkt_string();
136         struct passwd*  pwd;    
137         
138         setpwent();             /* open the pwd database */
139         pwd = getpwnam(userName);
140         if (pwd)
141         {
142                 if ( chown(ktc_tkt_string(), pwd->pw_uid, pwd->pw_gid) < 0 )
143                         perror("chown: ");
144         }
145         else perror("getpwnam : ");
146         endpwent();             /* close the pwd database */
147 }
148 #endif /* AFS_KERBEROS_ENV */
149
150 #endif
151
152