/*- * Copyright (c) 2002-2018 The UbixOS Project. * All rights reserved. * * This was developed by Christopher W. Olsen for the UbixOS Project. * * Redistribution and use in source and binary forms, with or without modification, are permitted * provided that the following conditions are met: * * 1) Redistributions of source code must retain the above copyright notice, this list of * conditions, the following disclaimer and the list of authors. * 2) Redistributions in binary form must reproduce the above copyright notice, this list of * conditions, the following disclaimer and the list of authors in the documentation and/or * other materials provided with the distribution. * 3) Neither the name of the UbixOS Project nor the names of its contributors may be used to * endorse or promote products derived from this software without specific prior written * permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include <ubixos/syscall.h> #include <ubixos/syscalls.h> #include <ubixos/sched.h> #include <sys/types.h> #include <ubixos/exec.h> #include <sys/elf.h> #include <ubixos/endtask.h> #include <ubixos/time.h> #include <sys/video.h> #include <sys/trap.h> #include <vfs/file.h> #include <ubixfs/ubixfs.h> #include <string.h> #include <lib/kprintf.h> #include <lib/kmalloc.h> #include <ubixos/vitals.h> /* #include <sde/sde.h> */ #include <mpi/mpi.h> #include <vmm/vmm.h> //long fuword(const void *base); //void sdeTestThread(); asm( ".globl _sysCallNew \n" "_sysCallNew: \n" " pusha \n" " push %ss \n" " push %ds \n" " push %es \n" " push %fs \n" " push %gs \n" " cmpl totalCalls,%eax \n" " jae invalidSysCallNew \n" " mov %esp,%ebx \n" " add $12,%ebx \n" " push (%ebx) \n" " call *systemCalls(,%eax,4) \n" " add $4,%esp \n" " jmp doneNew \n" "invalidSysCallNew: \n" " call InvalidSystemCall \n" "doneNew: \n" " pop %gs \n" " pop %fs \n" " pop %es \n" " pop %ds \n" " pop %ss \n" " popa \n" " iret \n" ); void InvalidSystemCall() { kprintf("attempt was made to an invalid system call\n"); return; } typedef struct _UbixUser UbixUser; struct _UbixUser { char *username; char *password; int uid; int gid; char *home; char *shell; }; void sysAuth(UbixUser *uu) { kprintf("authenticating user %s\n", uu->username); /* MrOlsen 2016-01-01 uh? if(uu->username == "root" && uu->password == "user") { uu->uid = 0; uu->gid = 0; } */ uu->uid = -1; uu->gid = -1; return; } void sysPasswd(char *passwd) { kprintf("changing user password for user %d\n", _current->uid); return; } void sysAddModule() { return; } void sysRmModule() { return; } void sysGetpid(int *pid) { if (pid) *pid = _current->id; return; } void sysGetUid(int *uid) { if (uid) *uid = _current->uid; return; } void sysGetGid(int *gid) { if (gid) *gid = _current->gid; return; } void sysSetUid(int uid, int *status) { if (_current->uid == 0x0) { _current->uid = uid; if (status) *status = 0x0; } else { if (status) *status = 1; } return; } void sysSetGid(int gid, int *status) { if (_current->gid == 0x0) { _current->gid = gid; if (status) *status = 0x0; } else { if (status) *status = 1; } return; } void sysExit(int status) { endTask(_current->id); } void sysCheckPid(int pid, int *ptr) { kTask_t *tmpTask = schedFindTask(pid); if ((tmpTask != 0x0) && (ptr != 0x0)) *ptr = tmpTask->state; else *ptr = 0x0; return; } /************************************************************************ Function: void sysGetFreePage(); Description: Allocs A Page To The Users VM Space Notes: ************************************************************************/ void sysGetFreePage(long *ptr, int count, int type) { if (ptr) { if (type == 2) *ptr = (long) vmmGetFreeVirtualPage(_current->id, count, VM_THRD); else *ptr = (long) vmmGetFreeVirtualPage(_current->id, count, VM_TASK); } return; } void sysGetDrives(uInt32 *ptr) { if (ptr) *ptr = 0x0; //(uInt32)devices; return; } void sysGetUptime(uInt32 *ptr) { if (ptr) *ptr = systemVitals->sysTicks; return; } void sysGetTime(uInt32 *ptr) { if (ptr) *ptr = systemVitals->sysUptime + systemVitals->timeStart; return; } void sysGetCwd(char *data, int len) { if (data) sprintf(data, "%s", _current->oInfo.cwd); return; } void sysSchedYield() { sched_yield(); } void sysStartSDE() { int i = 0x0; for (i = 0; i < 1400; i++) { asm("hlt"); } //execThread(sdeThread,(uInt32)(kmalloc(0x2000)+0x2000),0x0); for (i = 0; i < 1400; i++) { asm("hlt"); } return; } void invalidCall(int sys_call) { kprintf("Invalid System Call #[%i]\n", sys_call); return; } /*** END ***/