[hackers] [ubase] Add initial implementation of sysctl(8) || sin
commit 8b32decb6feabf771a06aed6f9c19fa27da7f1f6
Author: sin <sin_AT_2f30.org>
Date: Thu Apr 17 15:18:38 2014 +0100
Add initial implementation of sysctl(8)
Needs a bit of cleanup (avoiding magic numbers etc.).
diff --git a/Makefile b/Makefile
index dd2f1cd..17f620c 100644
--- a/Makefile
+++ b/Makefile
_AT_@ -47,6 +47,7 @@ SRC = \
swapoff.c \
swapon.c \
switch_root.c \
+ sysctl.c \
truncate.c \
umount.c \
unshare.c \
_AT_@ -92,6 +93,7 @@ MAN8 = \
swapoff.8 \
swapon.8 \
switch_root.8 \
+ sysctl.8 \
umount.8
OBJ = $(SRC:.c=.o) $(LIB)
diff --git a/README b/README
index 7743756..7cf5f95 100644
--- a/README
+++ b/README
_AT_@ -9,7 +9,7 @@ The following programs are currently implemented:
chvt clear ctrlaltdel df dmesg eject fallocate free getty halt id
insmod killall5 lsmod lsusb mknod mkswap mount mountpoint pagesize
pidof pivot_root ps respawn rmmod stat su swapoff swapon
- switch_root truncate umount unshare uptime watch who
+ switch_root sysctl truncate umount unshare uptime watch who
The complement of ubase is sbase[1] which mostly follows POSIX and
provides all the portable tools. Together they are intended to form a
diff --git a/TODO b/TODO
index 409a6df..ec7272e 100644
--- a/TODO
+++ b/TODO
_AT_@ -6,7 +6,6 @@ Tools
* swaplabel(8)
* last(1)
* losetup(8)
- * sysctl
* lspci
* mkswap [-L]
* passwd
diff --git a/sysctl.8 b/sysctl.8
new file mode 100644
index 0000000..62dc27a
--- /dev/null
+++ b/sysctl.8
_AT_@ -0,0 +1,9 @@
+.TH SYSCTL 8 ubase-VERSION
+.SH NAME
+BsysctlR - Configure kernel parameters at runtime
+.SH SYNOPSIS
+BsysctlR IvariableR[=IvalueR]...
+.SH DESCRIPTION
+BsysctlR modifies kernel parameters at runtime. The parameters available
+are those listed under I/proc/sys/R. Procfs is required for sysctl support
+in Linux. You can use BsysctlR to both read and write sysctl data.
diff --git a/sysctl.c b/sysctl.c
new file mode 100644
index 0000000..c6e42ce
--- /dev/null
+++ b/sysctl.c
_AT_@ -0,0 +1,139 @@
+/* See LICENSE file for copyright and license details. */
+#include <fcntl.h>
+#include <limits.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include "util.h"
+
+static int
+getsysctl(char *variable, char **value)
+{
+ char path[PATH_MAX];
+ char *p;
+ char *buf;
+ int fd;
+ ssize_t n;
+
+ for (p = variable; *p; p++)
+ if (*p == '.')
+ *p = '/';
+
+ strlcpy(path, "/proc/sys/", sizeof(path));
+ if (strlcat(path, variable, sizeof(path)) >= sizeof(path))
+ return -1;
+
+ fd = open(path, O_RDONLY);
+ if (fd < 0)
+ return -1;
+
+ buf = malloc(1024);
+ if (!buf) {
+ close(fd);
+ return -1;
+ }
+
+ n = read(fd, buf, 1023);
+ if (n <= 0) {
+ close(fd);
+ free(buf);
+ return -1;
+ }
+ buf[n] = '
Received on Thu Apr 17 2014 - 16:31:48 CEST
This archive was generated by hypermail 2.3.0
: Thu Apr 17 2014 - 16:36:22 CEST