Removed version number from file header.
[samba.git] / source / auth / auth_rhosts.c
index cd1bf57f8659097a1920b54899a78e6b860e4ba8..9586d1d65ec6b5bf7681f604a34613ea7e6aaac1 100644 (file)
@@ -1,6 +1,5 @@
 /* 
-   Unix SMB/Netbios implementation.
-   Version 1.9.
+   Unix SMB/CIFS implementation.
    Main SMB reply routines
    Copyright (C) Andrew Tridgell 1992-1998
    
@@ -131,11 +130,10 @@ static BOOL check_user_equiv(const char *user, const char *remote, const char *e
 /****************************************************************************
 check for a possible hosts equiv or rhosts entry for the user
 ****************************************************************************/
-static BOOL check_hosts_equiv(char *user) /* should be const... */
+
+static BOOL check_hosts_equiv(struct passwd *pass)
 {
   char *fname = NULL;
-  pstring rhostsfile;
-  struct passwd *pass = Get_Pwnam(user,False);
 
   if (!pass) 
     return(False);
@@ -148,33 +146,86 @@ static BOOL check_hosts_equiv(char *user) /* should be const... */
                  return(True);
   }
   
-  if (lp_use_rhosts())
-    {
-      char *home = pass->pw_dir;
-      if (home) {
-             slprintf(rhostsfile, sizeof(rhostsfile)-1, "%s/.rhosts", home);
-             if (check_user_equiv(pass->pw_name,client_name(),rhostsfile))
-                     return(True);
-      }
-    }
-
   return(False);
 }
 
+
 /****************************************************************************
  Check for a valid .rhosts/hosts.equiv entry for this user
 ****************************************************************************/
 
-NTSTATUS check_rhosts_security(const auth_usersupplied_info *user_info, 
-                            auth_serversupplied_info *server_info)
+static NTSTATUS check_hostsequiv_security(const struct auth_context *auth_context,
+                                         void *my_private_data, 
+                                         TALLOC_CTX *mem_ctx,
+                                         const auth_usersupplied_info *user_info, 
+                                         auth_serversupplied_info **server_info)
 {
        NTSTATUS nt_status = NT_STATUS_LOGON_FAILURE;
+       struct passwd *pass = Get_Pwnam(user_info->internal_username.str);
+       
+       if (pass) {
+               if (check_hosts_equiv(pass)) {
+                       nt_status = NT_STATUS_OK;
+                       make_server_info_pw(server_info, pass);
+               }
+       } else {
+               nt_status = NT_STATUS_NO_SUCH_USER;
+       }
 
-       become_root();
-       if (check_hosts_equiv(user_info->unix_username.str)) {
-               nt_status = NT_STATUS_OK;
+       return nt_status;
+}
+
+/* module initialisation */
+BOOL auth_init_hostsequiv(struct auth_context *auth_context, auth_methods **auth_method) 
+{
+       if (!make_auth_methods(auth_context, auth_method)) {
+               return False;
+       }
+
+       (*auth_method)->auth = check_hostsequiv_security;
+       return True;
+}
+
+
+/****************************************************************************
+ Check for a valid .rhosts/hosts.equiv entry for this user
+****************************************************************************/
+
+static NTSTATUS check_rhosts_security(const struct auth_context *auth_context,
+                                     void *my_private_data, 
+                                     TALLOC_CTX *mem_ctx,
+                                     const auth_usersupplied_info *user_info, 
+                                     auth_serversupplied_info **server_info)
+{
+       NTSTATUS nt_status = NT_STATUS_LOGON_FAILURE;
+       struct passwd *pass = Get_Pwnam(user_info->internal_username.str);
+       pstring rhostsfile;
+       
+       if (pass) {
+               char *home = pass->pw_dir;
+               if (home) {
+                       slprintf(rhostsfile, sizeof(rhostsfile)-1, "%s/.rhosts", home);
+                       become_root();
+                       if (check_user_equiv(pass->pw_name,client_name(),rhostsfile)) {
+                               nt_status = NT_STATUS_OK;
+                               make_server_info_pw(server_info, pass);
+                       }
+                       unbecome_root();
+               } 
+       } else {
+               nt_status = NT_STATUS_NO_SUCH_USER;
        }
-       unbecome_root();
 
        return nt_status;
 }
+
+/* module initialisation */
+BOOL auth_init_rhosts(struct auth_context *auth_context, auth_methods **auth_method) 
+{
+       if (!make_auth_methods(auth_context, auth_method)) {
+               return False;
+       }
+
+       (*auth_method)->auth = check_rhosts_security;
+       return True;
+}