1/* $NetBSD: pcnfsd_v1.c,v 1.5 2018/01/23 21:06:25 sevan Exp $ */ 2 3/* RE_SID: @(%)/usr/dosnfs/shades_SCCS/unix/pcnfsd/v2/src/SCCS/s.pcnfsd_v1.c 1.1 91/09/03 12:41:50 SMI */ 4/* 5**===================================================================== 6** Copyright (c) 1986,1987,1988,1989,1990,1991 by Sun Microsystems, Inc. 7** @(#)pcnfsd_v1.c 1.1 9/3/91 8**===================================================================== 9*/ 10/* 11**===================================================================== 12** I N C L U D E F I L E S E C T I O N * 13** * 14** If your port requires different include files, add a suitable * 15** #define in the customization section, and make the inclusion or * 16** exclusion of the files conditional on this. * 17**===================================================================== 18*/ 19 20#include <sys/file.h> 21#include <sys/ioctl.h> 22#include <sys/stat.h> 23 24#include <netdb.h> 25#include <pwd.h> 26#include <signal.h> 27#include <stdio.h> 28#include <string.h> 29#include <unistd.h> 30 31#ifndef SYSV 32#include <sys/wait.h> 33#endif 34 35#ifdef ISC_2_0 36#include <sys/fcntl.h> 37#endif 38 39#ifdef SHADOW_SUPPORT 40#include <shadow.h> 41#endif 42 43#include "common.h" 44#include "pcnfsd.h" 45#include "extern.h" 46 47/* 48**--------------------------------------------------------------------- 49** Misc. variable definitions 50**--------------------------------------------------------------------- 51*/ 52 53int buggit = 0; 54 55/* 56**===================================================================== 57** C O D E S E C T I O N * 58**===================================================================== 59*/ 60 61 62/*ARGSUSED*/ 63void * 64pcnfsd_null_1_svc(void *arg, struct svc_req *req) 65{ 66 static char dummy; 67 return ((void *) &dummy); 68} 69 70auth_results * 71pcnfsd_auth_1_svc(auth_args *arg, struct svc_req *req) 72{ 73 static auth_results r; 74 75 char uname[32]; 76 char pw[64]; 77 int c1, c2; 78 struct passwd *p; 79 80 81 r.stat = AUTH_RES_FAIL; /* assume failure */ 82 r.uid = (int) -2; 83 r.gid = (int) -2; 84 85 scramble(arg->id, uname); 86 scramble(arg->pw, pw); 87 88#ifdef USER_CACHE 89 if (check_cache(uname, pw, &r.uid, &r.gid)) { 90 r.stat = AUTH_RES_OK; 91#ifdef WTMP 92 wlogin(uname, req); 93#endif 94 return (&r); 95 } 96#endif 97 98 p = get_password(uname); 99 if (p == NULL) 100 return (&r); 101 102 c1 = strlen(pw); 103 c2 = strlen(p->pw_passwd); 104 if ((c1 && !c2) || (c2 && !c1) || 105 (strcmp(p->pw_passwd, crypt(pw, p->pw_passwd)))) { 106 return (&r); 107 } 108 r.stat = AUTH_RES_OK; 109 r.uid = p->pw_uid; 110 r.gid = p->pw_gid; 111#ifdef WTMP 112 wlogin(uname, req); 113#endif 114 115#ifdef USER_CACHE 116 add_cache_entry(p); 117#endif 118 119 return (&r); 120} 121 122pr_init_results * 123pcnfsd_pr_init_1_svc(pr_init_args *pi_arg, struct svc_req *req) 124{ 125 static pr_init_results pi_res; 126 127 pi_res.stat = 128 (pirstat) pr_init(pi_arg->system, pi_arg->pn, &pi_res.dir); 129 130 return (&pi_res); 131} 132 133pr_start_results * 134pcnfsd_pr_start_1_svc(pr_start_args *ps_arg, struct svc_req *req) 135{ 136 static pr_start_results ps_res; 137 char *dummyptr; 138 139 ps_res.stat = 140 (psrstat) pr_start2(ps_arg->system, ps_arg->pn, ps_arg->user, 141 ps_arg->file, ps_arg->opts, &dummyptr); 142 143 return (&ps_res); 144} 145