|
|
1.1 ! root 1: /* user.h 6.1 83/07/29 */ ! 2: /* Documentation Block and Change history : ! 3: bernie 1/28/85 Add audittrail structures ! 4: */ ! 5: ! 6: #if defined(KERNEL) || defined(KUTIL) ! 7: #include "../machine/pcb.h" ! 8: #include "../h/dmap.h" ! 9: #include "../h/time.h" ! 10: #include "../h/resource.h" ! 11: #include "../h/errno.h" ! 12: #else ! 13: #include <errno.h> ! 14: #include <machine/pcb.h> ! 15: #include <sys/dmap.h> ! 16: #include <sys/time.h> ! 17: #include <sys/resource.h> ! 18: #endif ! 19: ! 20: /* ! 21: * Per process structure containing data that ! 22: * isn't needed in core when the process is swapped out. ! 23: */ ! 24: ! 25: #define SHSIZE 32 ! 26: #define MAXCOMLEN 16 /* <= MAXNAMLEN, >= sizeof(a_comm) */ ! 27: ! 28: struct user { ! 29: struct pcb u_pcb; ! 30: struct proc *u_procp; /* pointer to proc structure */ ! 31: int *u_ar0; /* address of users saved R0 */ ! 32: char u_comm[MAXNAMLEN + 1]; ! 33: ! 34: /* syscall parameters, results and catches */ ! 35: int u_arg[8]; /* arguments to current system call */ ! 36: int *u_ap; /* pointer to arglist */ ! 37: label_t u_qsave; /* for non-local gotos on interrupts */ ! 38: char u_error; /* return error code */ ! 39: union { /* syscall return values */ ! 40: struct { ! 41: int R_val1; ! 42: int R_val2; ! 43: } u_rv; ! 44: #define r_val1 u_rv.R_val1 ! 45: #define r_val2 u_rv.R_val2 ! 46: off_t r_off; ! 47: time_t r_time; ! 48: } u_r; ! 49: char u_eosys; /* special action on end of syscall */ ! 50: ! 51: /* 1.1 - processes and protection */ ! 52: short u_uid; /* effective user id */ ! 53: short u_gid; /* effective group id */ ! 54: int u_groups[NGROUPS]; /* groups, 0 terminated */ ! 55: short u_ruid; /* real user id */ ! 56: short u_rgid; /* real group id */ ! 57: ! 58: /* 1.2 - memory management */ ! 59: size_t u_tsize; /* text size (clicks) */ ! 60: size_t u_dsize; /* data size (clicks) */ ! 61: size_t u_ssize; /* stack size (clicks) */ ! 62: struct dmap u_dmap; /* disk map for data segment */ ! 63: struct dmap u_smap; /* disk map for stack segment */ ! 64: struct dmap u_cdmap, u_csmap; /* shadows of u_dmap, u_smap, for ! 65: use of parent during fork */ ! 66: label_t u_ssave; /* label variable for swapping */ ! 67: size_t u_odsize, u_ossize; /* for (clumsy) expansion swaps */ ! 68: time_t u_outime; /* user time at last sample */ ! 69: ! 70: /* 1.3 - signal management */ ! 71: int (*u_signal[NSIG])(); /* disposition of signals */ ! 72: int u_sigmask[NSIG]; /* signals to be blocked */ ! 73: int u_sigonstack; /* signals to take on sigstack */ ! 74: int u_oldmask; /* saved mask from before sigpause */ ! 75: int u_code; /* ``code'' to trap */ ! 76: struct sigstack u_sigstack; /* sp & on stack state variable */ ! 77: #define u_onstack u_sigstack.ss_onstack ! 78: #define u_sigsp u_sigstack.ss_sp ! 79: ! 80: /* 1.4 - descriptor management */ ! 81: struct file *u_ofile[NOFILE]; /* file structures for open files */ ! 82: char u_pofile[NOFILE]; /* per-process flags of open files */ ! 83: #define UF_EXCLOSE 0x1 /* auto-close on exec */ ! 84: #define UF_MAPPED 0x2 /* mapped from device */ ! 85: struct inode *u_cdir; /* current directory */ ! 86: struct inode *u_rdir; /* root directory of current process */ ! 87: struct tty *u_ttyp; /* controlling tty pointer */ ! 88: dev_t u_ttyd; /* controlling tty dev */ ! 89: short u_cmask; /* mask for file creation */ ! 90: ! 91: /* 1.5 - timing and statistics */ ! 92: struct rusage u_ru; /* stats for this proc */ ! 93: struct rusage u_cru; /* sum of stats for reaped children */ ! 94: struct itimerval u_timer[3]; ! 95: int u_XXX[3]; ! 96: time_t u_start; ! 97: short u_acflag; ! 98: ! 99: /* 1.6 - resource controls */ ! 100: struct rlimit u_rlimit[RLIM_NLIMITS]; ! 101: struct quota *u_quota; /* user's quota structure */ ! 102: int u_qflags; /* per process quota flags */ ! 103: ! 104: /* BEGIN TRASH */ ! 105: char u_segflg; /* 0:user D; 1:system; 2:user I */ ! 106: caddr_t u_base; /* base address for IO */ ! 107: unsigned int u_count; /* bytes remaining for IO */ ! 108: off_t u_offset; /* offset in file for IO */ ! 109: union { ! 110: struct { /* header of executable file */ ! 111: int Ux_mag; /* magic number */ ! 112: unsigned Ux_tsize; /* text size */ ! 113: unsigned Ux_dsize; /* data size */ ! 114: unsigned Ux_bsize; /* bss size */ ! 115: unsigned Ux_ssize; /* symbol table size */ ! 116: unsigned Ux_entloc; /* entry location */ ! 117: unsigned Ux_unused; ! 118: unsigned Ux_relflg; ! 119: } Ux_A; ! 120: char ux_shell[SHSIZE]; /* #! and name of interpreter */ ! 121: } u_exdata; ! 122: #define ux_mag Ux_A.Ux_mag ! 123: #define ux_tsize Ux_A.Ux_tsize ! 124: #define ux_dsize Ux_A.Ux_dsize ! 125: #define ux_bsize Ux_A.Ux_bsize ! 126: #define ux_ssize Ux_A.Ux_ssize ! 127: #define ux_entloc Ux_A.Ux_entloc ! 128: #define ux_unused Ux_A.Ux_unused ! 129: #define ux_relflg Ux_A.Ux_relflg ! 130: caddr_t u_dirp; /* pathname pointer */ ! 131: struct direct u_dent; /* current directory entry */ ! 132: struct inode *u_pdir; /* inode of parent directory of dirp */ ! 133: /* END TRASH */ ! 134: struct uprof { /* profile arguments */ ! 135: short *pr_base; /* buffer base */ ! 136: unsigned pr_size; /* buffer size */ ! 137: unsigned pr_off; /* pc offset */ ! 138: unsigned pr_scale; /* pc scaling */ ! 139: } u_prof; ! 140: /* Sys 5 stuff */ ! 141: daddr_t u_unused; /* used to be used for ulimit */ ! 142: short u_lock; /* process/text/data locking flags */ ! 143: #ifdef AUDITTRAIL ! 144: struct audbuf *u_rootdir; /* pathname of current rootdir */ ! 145: struct audbuf *u_cwdir; /* pathname of current directory */ ! 146: struct audbuf *u_path; /* pointer for holding audit pathname */ ! 147: short u_pathtype; /* flag for root or cwdir rel path */ ! 148: #endif ! 149: int u_stack[1]; ! 150: }; ! 151: ! 152: /* u_eosys values */ ! 153: #define JUSTRETURN 0 ! 154: #define RESTARTSYS 1 ! 155: #define SIMULATERTI 2 ! 156: #define REALLYRETURN 3 ! 157: ! 158: #ifdef KERNEL ! 159: extern struct user u; ! 160: extern struct user swaputl; ! 161: extern struct user forkutl; ! 162: extern struct user xswaputl; ! 163: extern struct user xswap2utl; ! 164: extern struct user pushutl; ! 165: extern struct user vfutl; ! 166: char ckey_cache[NOFCKEY]; /* = 1 if code key i may be in code cache */ ! 167: char dkey_cache[NOFDKEY]; /* = 1 if data key i may be in data cache */ ! 168: short ckey_cnt[NOFCKEY]; /* # of processes using code key i */ ! 169: short dkey_cnt[NOFDKEY]; /* processes using data key i (should be 1) */ ! 170: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.