00001
00002
00003
00004
00005
00006
00007
00008 #include<linux/kernel.h>
00009 #include<linux/fs.h>
00010 #include<linux/linkage.h>
00011 #include<linux/string.h>
00012 #include<descrip.h>
00013 #include<iledef.h>
00014 #include<ssdef.h>
00015 #include<uafdef.h>
00016 #include<uaidef.h>
00017 #include <exe_routines.h>
00018 #include <misc_routines.h>
00019 #include <rabdef.h>
00020 #include <asm/current.h>
00021 #include <linux/sched.h>
00022 #include <linux/file.h>
00023
00024 asmlinkage void exe_check_access (void) { }
00025 asmlinkage void exe_getuai_not (void) { }
00026 asmlinkage void exe_setuai (void) { }
00027 asmlinkage void exe_idtoasc (void) { }
00028 asmlinkage void exe_asctoid (void) { }
00029 asmlinkage void exe_add_ident (void) { }
00030 asmlinkage void exe_rem_ident (void) { }
00031 asmlinkage void exe_find_held (void) { }
00032 asmlinkage void exe_find_holder (void) { }
00033 asmlinkage void exe_mod_ident (void) { }
00034 asmlinkage void exe_mod_holder (void) { }
00035 asmlinkage void exe_grantid (void) { }
00036 asmlinkage void exe_revokid (void) { }
00037
00038 myopenfile(char * filename, char * rmsfilename) {
00039 struct file * file=0;
00040 extern int mount_root_vfs;
00041 #ifndef CONFIG_VMS
00042 if (mount_root_vfs)
00043 file = filp_open(filename,O_RDONLY,0);
00044 #endif
00045 if (!IS_ERR(file)) {
00046 #ifdef CONFIG_VMS
00047 file = rms_open_exec(rmsfilename);
00048 #endif
00049 }
00050 return file;
00051 }
00052
00053 myread(void * file, void * buf, int size) {
00054 unsigned long long pos=0;
00055 #if 0
00056 #ifdef CONFIG_VMS
00057 int retsize=rms_generic_file_read(file,buf,size,&pos);
00058 #else
00059 int retsize=generic_file_read(file,buf,size,&pos);
00060 #endif
00061 #else
00062 int retsize = kernel_read(file,0,buf,size);
00063 #endif
00064 return retsize;
00065 }
00066
00067 int exe_getuai(unsigned int efn, unsigned int *contxt, void *usrnam, void *itmlst, struct _iosb *iosb, void (*astadr)(__unknown_params), int astprm) {
00068 #if 0
00069 void * file = myopenfile("/vms_common/sysexe/sysuaf.dat", "[vms$common.sysexe]sysuaf.dat");
00070 #else
00071 int fd = sys_open("[vms_common.sysexe]sysuaf.dat",0,0);
00072 #endif
00073 int gotsize;
00074 char * charbuf;
00075 int sts = exe_std_alononpaged(4096, &gotsize, &charbuf);
00076 struct _uaf * buf = charbuf;
00077 #if 0
00078 int read=myread(file,buf,4096);
00079 #else
00080 asmlinkage ssize_t sys_read(unsigned int fd, char * buf, size_t count);
00081 int read = sys_read(fd, buf, 4096);
00082 #endif
00083 struct dsc_descriptor * user_dsc = usrnam;
00084 int i;
00085 for(i=0;i<2;i++)
00086 if (0==strncmp(buf[i].uaf_t_username,user_dsc->dsc$a_pointer,user_dsc->dsc$w_length)) {
00087 break;
00088 }
00089 if (i==2) {
00090 exe_std_deanonpgdsiz(buf,4096);
00091 return 0;
00092 }
00093 struct _uaf * uaf = &buf[i];
00094
00095 struct _ile3 * it=itmlst;
00096 while (it->ile3_w_code) {
00097 int * bufaddr_int = it->ile3_ps_bufaddr;
00098 switch (it->ile3_w_code) {
00099 case UAI__USERNAME:
00100 memcpy(bufaddr_int, uaf->uaf_t_username, 32);
00101 break;
00102 case UAI__PASSWORD:
00103 memcpy(bufaddr_int, uaf->uaf_l_pwd, 12);
00104 break;
00105 case UAI__MEM:
00106 memcpy(bufaddr_int, &uaf->uaf_w_mem, 2);
00107 break;
00108 case UAI__GRP:
00109 memcpy(bufaddr_int, &uaf->uaf_w_grp, 2);
00110 break;
00111 case UAI__OWNER:
00112 memcpy(bufaddr_int, uaf->uaf_t_owner, 20);
00113 break;
00114 case UAI__PRIV:
00115 case UAI__DEF_PRIV:
00116 memcpy(bufaddr_int, &uaf->uaf_q_priv, 4);
00117 break;
00118 default:
00119 printk("getdvi item_code %x not implemented\n",it->ile3_w_code);
00120 break;
00121 }
00122 it++;
00123 }
00124 exe_std_deanonpgdsiz(buf,4096);
00125 return SS__NORMAL;
00126 }
00127
00128 asmlinkage int exe_getuai_wrap(long * s) {
00129 return exe_getuai(s[0],s[1],s[2],s[3],s[4],s[5],s[6]);
00130 }
00131