aboutsummaryrefslogtreecommitdiff
path: root/toys/android
diff options
context:
space:
mode:
Diffstat (limited to 'toys/android')
-rw-r--r--toys/android/getprop.c119
-rw-r--r--toys/android/setprop.c44
-rw-r--r--toys/android/start.c59
3 files changed, 0 insertions, 222 deletions
diff --git a/toys/android/getprop.c b/toys/android/getprop.c
deleted file mode 100644
index 51ef7f6b..00000000
--- a/toys/android/getprop.c
+++ /dev/null
@@ -1,119 +0,0 @@
-/* getprop.c - Get an Android system property
- *
- * Copyright 2015 The Android Open Source Project
-
-USE_GETPROP(NEWTOY(getprop, ">2Z", TOYFLAG_USR|TOYFLAG_SBIN))
-
-config GETPROP
- bool "getprop"
- default y
- depends on TOYBOX_ON_ANDROID && TOYBOX_SELINUX
- help
- usage: getprop [NAME [DEFAULT]]
-
- Gets an Android system property, or lists them all.
-*/
-
-#define FOR_getprop
-#include "toys.h"
-
-#include <sys/system_properties.h>
-
-#include <selinux/android.h>
-#include <selinux/label.h>
-#include <selinux/selinux.h>
-
-GLOBALS(
- size_t size;
- char **nv; // name/value pairs: even=name, odd=value
- struct selabel_handle *handle;
-)
-
-static char *get_property_context(const char *property)
-{
- char *context = NULL;
-
- if (selabel_lookup(TT.handle, &context, property, 1)) {
- perror_exit("unable to lookup label for \"%s\"", property);
- }
- return context;
-}
-
-static void read_callback(void *unused, const char *name, const char *value,
- unsigned serial)
-{
- if (!(TT.size&31)) TT.nv = xrealloc(TT.nv, (TT.size+32)*2*sizeof(char *));
-
- TT.nv[2*TT.size] = xstrdup((char *)name);
- if (toys.optflags & FLAG_Z) {
- TT.nv[1+2*TT.size++] = get_property_context(name);
- } else {
- TT.nv[1+2*TT.size++] = xstrdup((char *)value);
- }
-}
-
-static void add_property(const prop_info *pi, void *unused)
-{
- __system_property_read_callback(pi, read_callback, NULL);
-}
-
-static void print_callback(void *unused, const char *unused_name, const char *value,
- unsigned unused_serial)
-{
- puts(value);
-}
-
-// Needed to supress extraneous "Loaded property_contexts from" message
-static int selinux_log_callback_local(int type, const char *fmt, ...)
-{
- va_list ap;
-
- if (type == SELINUX_INFO) return 0;
- va_start(ap, fmt);
- verror_msg((char *)fmt, 0, ap);
- va_end(ap);
- return 0;
-}
-
-void getprop_main(void)
-{
- if (toys.optflags & FLAG_Z) {
- union selinux_callback cb;
-
- cb.func_log = selinux_log_callback_local;
- selinux_set_callback(SELINUX_CB_LOG, cb);
- TT.handle = selinux_android_prop_context_handle();
- if (!TT.handle) error_exit("unable to get selinux property context handle");
- }
-
- if (*toys.optargs) {
- if (toys.optflags & FLAG_Z) {
- char *context = get_property_context(*toys.optargs);
-
- puts(context);
- if (CFG_TOYBOX_FREE) free(context);
- } else {
- const prop_info* pi = __system_property_find(*toys.optargs);
- if (pi == NULL) {
- puts(toys.optargs[1] ? toys.optargs[1] : "");
- } else {
- __system_property_read_callback(pi, print_callback, NULL);
- }
- }
- } else {
- size_t i;
-
- if (__system_property_foreach(add_property, NULL))
- error_exit("property_list");
- qsort(TT.nv, TT.size, 2*sizeof(char *), qstrcmp);
- for (i = 0; i<TT.size; i++) printf("[%s]: [%s]\n", TT.nv[i*2],TT.nv[1+i*2]);
- if (CFG_TOYBOX_FREE) {
- for (i = 0; i<TT.size; i++) {
- free(TT.nv[i*2]);
- free(TT.nv[1+i*2]);
- }
- free(TT.nv);
- }
- }
- if (CFG_TOYBOX_FREE && (toys.optflags & FLAG_Z)) selabel_close(TT.handle);
-}
diff --git a/toys/android/setprop.c b/toys/android/setprop.c
deleted file mode 100644
index cda34a5d..00000000
--- a/toys/android/setprop.c
+++ /dev/null
@@ -1,44 +0,0 @@
-/* setprop.c - Set an Android system property
- *
- * Copyright 2015 The Android Open Source Project
-
-USE_SETPROP(NEWTOY(setprop, "<2>2", TOYFLAG_USR|TOYFLAG_SBIN))
-
-config SETPROP
- bool "setprop"
- default y
- depends on TOYBOX_ON_ANDROID
- help
- usage: setprop NAME VALUE
-
- Sets an Android system property.
-*/
-
-#define FOR_setprop
-#include "toys.h"
-
-void setprop_main(void)
-{
- char *name = toys.optargs[0], *value = toys.optargs[1];
- char *p;
- size_t name_len = strlen(name), value_len = strlen(value);
-
- // property_set doesn't tell us why it failed, and actually can't
- // recognize most failures (because it doesn't wait for init), so
- // we duplicate all of init's checks here to help the user.
-
- if (value_len >= PROP_VALUE_MAX && !strncmp(value, "ro.", 3))
- error_exit("value '%s' too long; try '%.*s'",
- value, PROP_VALUE_MAX - 1, value);
-
- if (*name == '.' || name[name_len - 1] == '.')
- error_exit("property names must not start or end with '.'");
- if (strstr(name, ".."))
- error_exit("'..' is not allowed in a property name");
- for (p = name; *p; ++p)
- if (!isalnum(*p) && !strchr(":@_.-", *p))
- error_exit("invalid character '%c' in name '%s'", *p, name);
-
- if (__system_property_set(name, value))
- error_msg("failed to set property '%s' to '%s'", name, value);
-}
diff --git a/toys/android/start.c b/toys/android/start.c
deleted file mode 100644
index 5df847a9..00000000
--- a/toys/android/start.c
+++ /dev/null
@@ -1,59 +0,0 @@
-/* start.c - Start/stop system services.
- *
- * Copyright 2016 The Android Open Source Project
-
-USE_START(NEWTOY(start, "", TOYFLAG_USR|TOYFLAG_SBIN))
-USE_STOP(NEWTOY(stop, "", TOYFLAG_USR|TOYFLAG_SBIN))
-
-config START
- bool "start"
- depends on TOYBOX_ON_ANDROID
- default y
- help
- usage: start [SERVICE...]
-
- Starts the given system service, or netd/surfaceflinger/zygotes.
-
-config STOP
- bool "stop"
- depends on TOYBOX_ON_ANDROID
- default y
- help
- usage: stop [SERVICE...]
-
- Stop the given system service, or netd/surfaceflinger/zygotes.
-*/
-
-#define FOR_start
-#include "toys.h"
-
-static void start_stop(int start)
-{
- char *property = start ? "ctl.start" : "ctl.stop";
- // null terminated in both directions
- char *services[] = {0,"netd","surfaceflinger","zygote","zygote_secondary",0},
- **ss = toys.optargs;
- int direction = 1;
-
- if (getuid()) error_exit("must be root");
-
- if (!*ss) {
- // If we don't have optargs, iterate through services forward/backward.
- ss = services+1;
- if (!start) ss = services+ARRAY_LEN(services)-2, direction = -1;
- }
-
- for (; *ss; ss += direction)
- if (__system_property_set(property, *ss))
- error_exit("failed to set property '%s' to '%s'", property, *ss);
-}
-
-void start_main(void)
-{
- start_stop(1);
-}
-
-void stop_main(void)
-{
- start_stop(0);
-}