mescc: Support GNU Bash.
* include/errno.h (EACCES, ENOSPC, ESPIPE): New macro. * include/linux/x86/syscall.h (SYS_setuid, SYS_geteuid, SYS_getegid, SYS_setgid): New macro. * include/linux/x86_64/syscall.h: Likewise. * include/stdint.h (LLONG_MIN, LLONG_MAX, SIZE_MAX): New macro. * include/sys/stat.h (S_ISUID, S_ISGID, S_IXGRP, S_IXOTH, S_IRGRP, S_IROTH, S_IWGRP, S_IWOTH, S_IRWXG, S_IRWXO): New macro. * include/termio.h: New file. * include/unistd.h (_POSIX_VERSION): New macro. * lib/linux/gnu.c (geteuid, getegid, setuid, setgid): New function. * lib/string/memchr.c: New file. * lib/stub/getpwuid.c: New file. * lib/stub/rand.c: New file. * lib/stub/ttyname.c: New file. * include/string.h (memchr): Declare. * include/unistd.h (geteuid, getegid, setuid, setgid): Declare.
This commit is contained in:
parent
6b5ac57602
commit
9ecc11ee52
|
@ -44,11 +44,14 @@ int errno;
|
||||||
#define ECHILD 10
|
#define ECHILD 10
|
||||||
#define EAGAIN 11
|
#define EAGAIN 11
|
||||||
#define ENOMEM 12
|
#define ENOMEM 12
|
||||||
|
#define EACCES 13
|
||||||
#define EEXIST 17
|
#define EEXIST 17
|
||||||
#define ENOTDIR 20
|
#define ENOTDIR 20
|
||||||
#define EISDIR 21
|
#define EISDIR 21
|
||||||
#define EINVAL 22
|
#define EINVAL 22
|
||||||
#define EMFILE 24
|
#define EMFILE 24
|
||||||
|
#define ENOSPC 28
|
||||||
|
#define ESPIPE 29
|
||||||
#define EPIPE 32
|
#define EPIPE 32
|
||||||
#define ERANGE 34
|
#define ERANGE 34
|
||||||
|
|
||||||
|
|
|
@ -73,4 +73,10 @@
|
||||||
#define SYS_getdents 0x8d
|
#define SYS_getdents 0x8d
|
||||||
#define SYS_clock_gettime 0x109
|
#define SYS_clock_gettime 0x109
|
||||||
|
|
||||||
|
// bash
|
||||||
|
#define SYS_setuid 0x17
|
||||||
|
#define SYS_geteuid 0x31
|
||||||
|
#define SYS_getegid 0x32
|
||||||
|
#define SYS_setgid 0x3e
|
||||||
|
|
||||||
#endif // __MES_LINUX_X86_SYSCALL_H
|
#endif // __MES_LINUX_X86_SYSCALL_H
|
||||||
|
|
|
@ -69,4 +69,10 @@
|
||||||
#define SYS_getdents 0x4e
|
#define SYS_getdents 0x4e
|
||||||
#define SYS_clock_gettime 0xe4
|
#define SYS_clock_gettime 0xe4
|
||||||
|
|
||||||
|
// bash
|
||||||
|
#define SYS_setuid 0x69
|
||||||
|
#define SYS_setgid 0x6a
|
||||||
|
#define SYS_geteuid 0x6b
|
||||||
|
#define SYS_getegid 0x6c
|
||||||
|
|
||||||
#endif // __MES_LINUX_X86_64_SYSCALL_H
|
#endif // __MES_LINUX_X86_64_SYSCALL_H
|
||||||
|
|
|
@ -36,6 +36,9 @@ struct passwd
|
||||||
char *pw_shell;
|
char *pw_shell;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct passwd * getpwuid ();
|
||||||
|
|
||||||
|
|
||||||
#endif // ! WITH_GLIBC
|
#endif // ! WITH_GLIBC
|
||||||
|
|
||||||
#endif // __MES_PWD_H
|
#endif // __MES_PWD_H
|
||||||
|
|
|
@ -108,11 +108,17 @@ typedef long ptrdiff_t;
|
||||||
#define LONG_MAX INT_MAX
|
#define LONG_MAX INT_MAX
|
||||||
#define UINT_MAX UINT32_MAX
|
#define UINT_MAX UINT32_MAX
|
||||||
#define ULONG_MAX UINT32_MAX
|
#define ULONG_MAX UINT32_MAX
|
||||||
|
#define LLONG_MIN INT64_MIN
|
||||||
|
#define LLONG_MAX INT64_MAX
|
||||||
|
#define SIZE_MAX UINT32_MAX
|
||||||
#elif __x86_64__
|
#elif __x86_64__
|
||||||
#define LONG_MIN INT64_MIN
|
#define LONG_MIN INT64_MIN
|
||||||
#define LONG_MAX INT64_MAX
|
#define LONG_MAX INT64_MAX
|
||||||
#define UINT_MAX UINT32_MAX
|
#define UINT_MAX UINT32_MAX
|
||||||
#define ULONG_MAX UINT64_MAX
|
#define ULONG_MAX UINT64_MAX
|
||||||
|
#define LLONG_MIN INT64_MIN
|
||||||
|
#define LLONG_MAX INT64_MAX
|
||||||
|
#define SIZE_MAX UINT64_MAX
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif // ! WITH_GLIBC
|
#endif // ! WITH_GLIBC
|
||||||
|
|
|
@ -42,6 +42,7 @@ int setenv (char const* s, char const* v, int overwrite_p);
|
||||||
void unsetenv (char const *name);
|
void unsetenv (char const *name);
|
||||||
void *malloc (size_t);
|
void *malloc (size_t);
|
||||||
void qsort (void *base, size_t nmemb, size_t size, int (*compar)(void const *, void const *));
|
void qsort (void *base, size_t nmemb, size_t size, int (*compar)(void const *, void const *));
|
||||||
|
int rand (void);
|
||||||
void *realloc (void *p, size_t size);
|
void *realloc (void *p, size_t size);
|
||||||
double strtod (char const *string, char **tailptr);
|
double strtod (char const *string, char **tailptr);
|
||||||
float strtof (char const *string, char **tailptr);
|
float strtof (char const *string, char **tailptr);
|
||||||
|
|
|
@ -45,6 +45,7 @@ typedef unsigned long size_t;
|
||||||
typedef long ssize_t;
|
typedef long ssize_t;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
void * memchr (void const *block, int c, size_t size);
|
||||||
void *memcpy (void *dest, void const *src, size_t n);
|
void *memcpy (void *dest, void const *src, size_t n);
|
||||||
void *memmove (void *dest, void const *src, size_t n);
|
void *memmove (void *dest, void const *src, size_t n);
|
||||||
void *memset (void *s, int c, size_t n);
|
void *memset (void *s, int c, size_t n);
|
||||||
|
|
|
@ -101,6 +101,17 @@ int stat (char const *file_name, struct stat *buf);
|
||||||
#define S_IWUSR 00200
|
#define S_IWUSR 00200
|
||||||
#define S_IRUSR 00400
|
#define S_IRUSR 00400
|
||||||
|
|
||||||
|
#define S_ISUID 0400
|
||||||
|
#define S_ISGID 02000
|
||||||
|
#define S_IXGRP 00010
|
||||||
|
#define S_IXOTH 00001
|
||||||
|
#define S_IRGRP 00040
|
||||||
|
#define S_IROTH 00004
|
||||||
|
#define S_IWGRP 00020
|
||||||
|
#define S_IWOTH 00002
|
||||||
|
#define S_IRWXG 00070
|
||||||
|
#define S_IRWXO 00007
|
||||||
|
|
||||||
#endif // ! WITH_GLIBC
|
#endif // ! WITH_GLIBC
|
||||||
|
|
||||||
#endif // __MES_SYS_STAT_H
|
#endif // __MES_SYS_STAT_H
|
||||||
|
|
64
include/termio.h
Normal file
64
include/termio.h
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
/* -*-comment-start: "//";comment-end:""-*-
|
||||||
|
* GNU Mes --- Maxwell Equations of Software
|
||||||
|
* Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
|
||||||
|
*
|
||||||
|
* This file is part of GNU Mes.
|
||||||
|
*
|
||||||
|
* GNU Mes is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 3 of the License, or (at
|
||||||
|
* your option) any later version.
|
||||||
|
*
|
||||||
|
* GNU Mes is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#ifndef __MES_TERMIO_H
|
||||||
|
#define __MES_TERMIO_H 1
|
||||||
|
|
||||||
|
#if WITH_GLIBC
|
||||||
|
#ifndef _GNU_SOURCE
|
||||||
|
#define _GNU_SOURCE
|
||||||
|
#endif
|
||||||
|
#undef __MES_TERMIO_H
|
||||||
|
#include_next <termio.h>
|
||||||
|
|
||||||
|
#else // ! WITH_GLIBC
|
||||||
|
|
||||||
|
#define TIOCGWINSZ 0x5413
|
||||||
|
#define TCGETA 0x5405
|
||||||
|
#define TCSETAW 0x5407
|
||||||
|
|
||||||
|
#define VTIME 5
|
||||||
|
#define VMIN 6
|
||||||
|
|
||||||
|
#define ISIG 0000001
|
||||||
|
#define ICANON 0000002
|
||||||
|
#define ECHO 0000010
|
||||||
|
#define ECHOK 0000040
|
||||||
|
#define ECHONL 0000100
|
||||||
|
|
||||||
|
#define ISTRIP 0000040
|
||||||
|
#define INLCR 0000100
|
||||||
|
#define ICRNL 0000400
|
||||||
|
|
||||||
|
#define CS8 0000060
|
||||||
|
#define PARENB 0000400
|
||||||
|
|
||||||
|
struct termio
|
||||||
|
{
|
||||||
|
unsigned short c_iflag;
|
||||||
|
unsigned short c_oflag;
|
||||||
|
unsigned short c_cflag;
|
||||||
|
unsigned short c_lflag;
|
||||||
|
unsigned char c_line;
|
||||||
|
unsigned char c_cc[8];
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // ! WITH_GLIBC
|
||||||
|
|
||||||
|
#endif // __MES_TERMIO_H
|
|
@ -29,6 +29,8 @@
|
||||||
|
|
||||||
#else // ! WITH_GLIBC
|
#else // ! WITH_GLIBC
|
||||||
|
|
||||||
|
#define _POSIX_VERSION 199009L
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#ifndef NULL
|
#ifndef NULL
|
||||||
#define NULL 0
|
#define NULL 0
|
||||||
|
@ -62,8 +64,12 @@ int execve (char const *file, char *const argv[], char *const env[]);
|
||||||
int execvp (char const *file, char *const argv[]);
|
int execvp (char const *file, char *const argv[]);
|
||||||
int fork (void);
|
int fork (void);
|
||||||
char *getcwd (char *buf, size_t size);
|
char *getcwd (char *buf, size_t size);
|
||||||
gid_t getgid (void);
|
|
||||||
uid_t getuid (void);
|
uid_t getuid (void);
|
||||||
|
gid_t getgid (void);
|
||||||
|
int setgid (gid_t newgid);
|
||||||
|
int setuid (uid_t newuid);
|
||||||
|
uid_t geteuid (void);
|
||||||
|
gid_t getegid (void);
|
||||||
int isatty (int fd);
|
int isatty (int fd);
|
||||||
int link (char const *oldname, char const *newname);
|
int link (char const *oldname, char const *newname);
|
||||||
off_t lseek (int fd, off_t offset, int whence);
|
off_t lseek (int fd, off_t offset, int whence);
|
||||||
|
|
|
@ -113,3 +113,8 @@
|
||||||
#include <stub/sigblock.c>
|
#include <stub/sigblock.c>
|
||||||
#include <stub/sigaddset.c>
|
#include <stub/sigaddset.c>
|
||||||
#include <stub/setlocale.c>
|
#include <stub/setlocale.c>
|
||||||
|
|
||||||
|
// bash
|
||||||
|
#include <stub/getpwuid.c>
|
||||||
|
#include <stub/rand.c>
|
||||||
|
#include <stub/ttyname.c>
|
||||||
|
|
|
@ -173,3 +173,28 @@ chdir (char const *file_name)
|
||||||
{
|
{
|
||||||
return _sys_call1 (SYS_chdir, (long)file_name);
|
return _sys_call1 (SYS_chdir, (long)file_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// bash
|
||||||
|
uid_t
|
||||||
|
geteuid ()
|
||||||
|
{
|
||||||
|
return _sys_call (SYS_geteuid);
|
||||||
|
}
|
||||||
|
|
||||||
|
gid_t
|
||||||
|
getegid ()
|
||||||
|
{
|
||||||
|
return _sys_call (SYS_getegid);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
setuid (uid_t newuid)
|
||||||
|
{
|
||||||
|
return _sys_call1 (SYS_setuid, (long)newuid);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
setgid (gid_t newgid)
|
||||||
|
{
|
||||||
|
return _sys_call1 (SYS_setgid, (long)newgid);
|
||||||
|
}
|
||||||
|
|
34
lib/string/memchr.c
Normal file
34
lib/string/memchr.c
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
/* -*-comment-start: "//";comment-end:""-*-
|
||||||
|
* GNU Mes --- Maxwell Equations of Software
|
||||||
|
* Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
|
||||||
|
*
|
||||||
|
* This file is part of GNU Mes.
|
||||||
|
*
|
||||||
|
* GNU Mes is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 3 of the License, or (at
|
||||||
|
* your option) any later version.
|
||||||
|
*
|
||||||
|
* GNU Mes is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
void *
|
||||||
|
memchr (void const *block, int c, size_t size)
|
||||||
|
{
|
||||||
|
char const *p = block;
|
||||||
|
while (size--)
|
||||||
|
{
|
||||||
|
if (c == *p)
|
||||||
|
return p;
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
33
lib/stub/getpwuid.c
Normal file
33
lib/stub/getpwuid.c
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
/* -*-comment-start: "//";comment-end:""-*-
|
||||||
|
* GNU Mes --- Maxwell Equations of Software
|
||||||
|
* Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
|
||||||
|
*
|
||||||
|
* This file is part of GNU Mes.
|
||||||
|
*
|
||||||
|
* GNU Mes is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 3 of the License, or (at
|
||||||
|
* your option) any later version.
|
||||||
|
*
|
||||||
|
* GNU Mes is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <libmes.h>
|
||||||
|
#include <pwd.h>
|
||||||
|
|
||||||
|
struct passwd *
|
||||||
|
getpwuid ()
|
||||||
|
{
|
||||||
|
static int stub = 0;
|
||||||
|
if (__mes_debug () && !stub)
|
||||||
|
eputs ("getpwuid stub\n");
|
||||||
|
stub = 1;
|
||||||
|
errno = 0;
|
||||||
|
return 0;
|
||||||
|
}
|
33
lib/stub/rand.c
Normal file
33
lib/stub/rand.c
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
/* -*-comment-start: "//";comment-end:""-*-
|
||||||
|
* GNU Mes --- Maxwell Equations of Software
|
||||||
|
* Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
|
||||||
|
*
|
||||||
|
* This file is part of GNU Mes.
|
||||||
|
*
|
||||||
|
* GNU Mes is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 3 of the License, or (at
|
||||||
|
* your option) any later version.
|
||||||
|
*
|
||||||
|
* GNU Mes is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <libmes.h>
|
||||||
|
#include <pwd.h>
|
||||||
|
|
||||||
|
int
|
||||||
|
rand (void)
|
||||||
|
{
|
||||||
|
static int stub = 0;
|
||||||
|
if (__mes_debug () && !stub)
|
||||||
|
eputs ("rand stub\n");
|
||||||
|
stub = 1;
|
||||||
|
errno = 0;
|
||||||
|
return 0;
|
||||||
|
}
|
35
lib/stub/ttyname.c
Normal file
35
lib/stub/ttyname.c
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
/* -*-comment-start: "//";comment-end:""-*-
|
||||||
|
* GNU Mes --- Maxwell Equations of Software
|
||||||
|
* Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
|
||||||
|
*
|
||||||
|
* This file is part of GNU Mes.
|
||||||
|
*
|
||||||
|
* GNU Mes is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 3 of the License, or (at
|
||||||
|
* your option) any later version.
|
||||||
|
*
|
||||||
|
* GNU Mes is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <libmes.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
char *
|
||||||
|
ttyname (int filedes)
|
||||||
|
{
|
||||||
|
static int stub = 0;
|
||||||
|
if (__mes_debug () && !stub)
|
||||||
|
eputs ("ttyname stub\n");
|
||||||
|
stub = 1;
|
||||||
|
errno = 0;
|
||||||
|
if (isatty (filedes))
|
||||||
|
return "/dev/tty0";
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in a new issue