0
0
mirror of https://github.com/termux/termux-packages.git synced 2024-11-23 13:46:16 +00:00
termux-packages/root-packages/avahi/avahi-daemon-main.c.patch
Tee KOBAYASHI 24e41c67af avahi: Move to root-packages
`avahi-daemon` does not launch on some newer Android environment.

Closes https://github.com/termux/termux-packages/issues/17061
2023-06-23 11:16:05 +09:00

106 lines
2.8 KiB
Diff

--- a/avahi-daemon/main.c
+++ b/avahi-daemon/main.c
@@ -135,7 +135,7 @@
#endif
} DaemonConfig;
-#define RESOLV_CONF "/etc/resolv.conf"
+#define RESOLV_CONF "@TERMUX_PREFIX@/etc/resolv.conf"
#define BROWSE_DOMAINS_MAX 16
static AvahiSEntryGroup *dns_servers_entry_group = NULL;
@@ -587,9 +587,9 @@
int fd;
char buf[32];
- fd = open("/etc/machine-id", O_RDONLY|O_CLOEXEC|O_NOCTTY);
+ fd = open("@TERMUX_PREFIX@/etc/machine-id", O_RDONLY|O_CLOEXEC|O_NOCTTY);
if (fd == -1 && errno == ENOENT)
- fd = open("/var/lib/dbus/machine-id", O_RDONLY|O_CLOEXEC|O_NOCTTY);
+ fd = open("@TERMUX_PREFIX@/var/lib/dbus/machine-id", O_RDONLY|O_CLOEXEC|O_NOCTTY);
if (fd == -1)
return NULL;
@@ -1338,6 +1338,7 @@
#define set_env(key, value) putenv(avahi_strdup_printf("%s=%s", (key), (value)))
+#ifndef __ANDROID__
static int drop_root(void) {
struct passwd *pw;
struct group * gr;
@@ -1400,6 +1401,7 @@
return 0;
}
+#endif /* __ANDROID__ */
static const char* pid_file_proc(void) {
return AVAHI_DAEMON_RUNTIME_DIR"/pid";
@@ -1413,6 +1415,7 @@
struct group * gr;
struct stat st;
+#ifndef __ANDROID__
if (!(pw = getpwnam(AVAHI_USER))) {
avahi_log_error( "Failed to find user '"AVAHI_USER"'.");
goto fail;
@@ -1422,6 +1425,7 @@
avahi_log_error( "Failed to find group '"AVAHI_GROUP"'.");
goto fail;
}
+#endif
u = umask(0000);
reset_umask = 1;
@@ -1431,14 +1435,20 @@
goto fail;
}
+#ifndef __ANDROID__
chown(AVAHI_DAEMON_RUNTIME_DIR, pw->pw_uid, gr->gr_gid);
+#endif
if (stat(AVAHI_DAEMON_RUNTIME_DIR, &st) < 0) {
avahi_log_error("stat(): %s\n", strerror(errno));
goto fail;
}
+#ifndef __ANDROID__
if (!S_ISDIR(st.st_mode) || st.st_uid != pw->pw_uid || st.st_gid != gr->gr_gid) {
+#else
+ if (!S_ISDIR(st.st_mode)) {
+#endif
avahi_log_error("Failed to create runtime directory "AVAHI_DAEMON_RUNTIME_DIR".");
goto fail;
}
@@ -1594,10 +1604,12 @@
else if (config.command == DAEMON_RUN) {
pid_t pid;
+#ifndef __ANDROID__
if (getuid() != 0 && config.drop_root) {
avahi_log_error("This program is intended to be run as root.");
goto finish;
}
+#endif
if ((pid = daemon_pid_file_is_running()) >= 0) {
avahi_log_error("Daemon already running on PID %u", pid);
@@ -1641,6 +1653,7 @@
if (make_runtime_dir() < 0)
goto finish;
+#ifndef __ANDROID__
if (config.drop_root) {
#ifdef ENABLE_CHROOT
if (config.use_chroot)
@@ -1657,6 +1670,7 @@
goto finish;
#endif
}
+#endif /* __ANDROID__ */
if (daemon_pid_file_create() < 0) {
avahi_log_error("Failed to create PID file: %s", strerror(errno));