Hi all,
I've attached a patch to add -b and -F arguments to the hostname
program within toybox. These options are used by the
'/etc/init.d/hostname.sh' init script in an image built with
OpenEmbedded. With these options added, the hostname is set correctly
during boot.
I've tried to keep the new code concise and followed the style used
elsewhere in toybox. Hopefully it won't need much cleanup.
As an aside, it'd be really useful to add some instructions on how to
contribute to toybox to the README file. I've not contributed to toybox
before so let me know if I've done anything wrong/missed anything and
I'll try to fix it.
Thanks,
Paul Barker
>From 151f576ab1fba44137beaeb95620b7942662b4d3 Mon Sep 17 00:00:00 2001
From: Paul Barker <[email protected]>
Date: Sun, 1 May 2016 15:42:57 +0100
Subject: [PATCH] Add -b and -F arguments to hostname
These arguments are required to correctly set the hostname at boot time. They
are used by the '/etc/init.d/hostname.sh' init script in an OpenEmbedded system.
---
toys/lsb/hostname.c | 42 ++++++++++++++++++++++++++++++++++++++++--
1 file changed, 40 insertions(+), 2 deletions(-)
diff --git a/toys/lsb/hostname.c b/toys/lsb/hostname.c
index 23467fb..ebfc803 100644
--- a/toys/lsb/hostname.c
+++ b/toys/lsb/hostname.c
@@ -4,23 +4,61 @@
*
* http://refspecs.linuxfoundation.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/hostname.html
-USE_HOSTNAME(NEWTOY(hostname, NULL, TOYFLAG_BIN))
+USE_HOSTNAME(NEWTOY(hostname, "bF:", TOYFLAG_BIN))
config HOSTNAME
bool "hostname"
default y
help
- usage: hostname [newname]
+ usage: hostname [-b] [-F FILENAME] [newname]
Get/Set the current hostname
+
+ -b Set hostname to 'localhost' if otherwise unset
+ -F Set hostname to contents of FILENAME
*/
#define FOR_hostname
#include "toys.h"
+GLOBALS(
+ char *fname;
+)
+
void hostname_main(void)
{
const char *hostname = toys.optargs[0];
+
+ if (toys.optflags & FLAG_F) {
+ char *buf;
+ if ((hostname = buf = readfile(TT.fname, 0, 0))) {
+ size_t len = strlen(hostname);
+ char *end = buf + len - 1;
+
+ /* Trim trailing whitespace. */
+ while (len && isspace(*end)) {
+ *end-- = '\0';
+ len--;
+ }
+ if (!len) {
+ free(buf);
+ hostname = NULL;
+ if (!(toys.optflags & FLAG_b))
+ error_exit("empty file '%s'", TT.fname);
+ }
+ } else if (!(toys.optflags & FLAG_b))
+ error_exit("failed to read '%s'", TT.fname);
+ }
+
+ if (!hostname && toys.optflags & FLAG_b) {
+ /* Do nothing if hostname already set. */
+ if (gethostname(toybuf, sizeof(toybuf))) perror_exit("get failed");
+ if (strnlen(toybuf, sizeof(toybuf))) exit(0);
+
+ /* Else set hostname to localhost. */
+ hostname = "localhost";
+ }
+
if (hostname) {
if (sethostname(hostname, strlen(hostname)))
perror_exit("set failed '%s'", hostname);
--
2.1.4
_______________________________________________
Toybox mailing list
[email protected]
http://lists.landley.net/listinfo.cgi/toybox-landley.net