diff options
Diffstat (limited to 'src/nm-daemon-helper')
| -rw-r--r-- | src/nm-daemon-helper/README.md | 11 | ||||
| -rw-r--r-- | src/nm-daemon-helper/meson.build | 15 | ||||
| -rw-r--r-- | src/nm-daemon-helper/nm-daemon-helper.c | 155 |
3 files changed, 0 insertions, 181 deletions
diff --git a/src/nm-daemon-helper/README.md b/src/nm-daemon-helper/README.md deleted file mode 100644 index 695f5335..00000000 --- a/src/nm-daemon-helper/README.md +++ /dev/null @@ -1,11 +0,0 @@ -nm-daemon-helper -================ - -A internal helper application that is spawned by NetworkManager -to perform certain actions. - -Currently all it does is doing a reverse DNS lookup, which -cannot be done by NetworkManager because the operation requires -to reconfigure the libc resolver (which is a process-wide operation). - -This is not directly useful to the user. diff --git a/src/nm-daemon-helper/meson.build b/src/nm-daemon-helper/meson.build deleted file mode 100644 index da0d6571..00000000 --- a/src/nm-daemon-helper/meson.build +++ /dev/null @@ -1,15 +0,0 @@ -executable( - 'nm-daemon-helper', - 'nm-daemon-helper.c', - include_directories : [ - src_inc, - top_inc, - ], - link_with: [ - libnm_std_aux, - ], - link_args: ldflags_linker_script_binary, - link_depends: linker_script_binary, - install: true, - install_dir: nm_libexecdir, -) diff --git a/src/nm-daemon-helper/nm-daemon-helper.c b/src/nm-daemon-helper/nm-daemon-helper.c deleted file mode 100644 index 32be93a4..00000000 --- a/src/nm-daemon-helper/nm-daemon-helper.c +++ /dev/null @@ -1,155 +0,0 @@ -/* SPDX-License-Identifier: LGPL-2.1-or-later */ - -/* Copyright (C) 2021 Red Hat, Inc. */ - -#include "libnm-std-aux/nm-default-std.h" - -#include <stdio.h> -#include <stdlib.h> -#include <arpa/inet.h> -#include <netdb.h> -#if defined(__GLIBC__) -#include <nss.h> -#endif -#include <stdarg.h> - -enum { - RETURN_SUCCESS = 0, - RETURN_INVALID_CMD = 1, - RETURN_INVALID_ARGS = 2, - RETURN_ERROR = 3, -}; - -static char * -read_arg(void) -{ - nm_auto_free char *arg = NULL; - size_t len = 0; - - if (getdelim(&arg, &len, '\0', stdin) < 0) - return NULL; - - return nm_steal_pointer(&arg); -} - -static int -more_args(void) -{ - nm_auto_free char *arg = NULL; - - arg = read_arg(); - - return !!arg; -} - -static int -cmd_version(void) -{ - if (more_args()) - return RETURN_INVALID_ARGS; - - printf("1"); - return RETURN_SUCCESS; -} - -static int -cmd_resolve_address(void) -{ - nm_auto_free char *address = NULL; - nm_auto_free char *services = NULL; - union { - struct sockaddr_in in; - struct sockaddr_in6 in6; - } sockaddr; - socklen_t sockaddr_size; - char name[NI_MAXHOST]; - char *saveptr = NULL; - char *service; - char *str; - int ret; - - address = read_arg(); - if (!address) - return RETURN_INVALID_ARGS; - - services = read_arg(); - if (!services) { - /* Called by an old NM version which doesn't support the 'services' - * argument. Use both services. */ - services = strdup("dns,files"); - } - - memset(&sockaddr, 0, sizeof(sockaddr)); - - if (inet_pton(AF_INET, address, &sockaddr.in.sin_addr) == 1) { - sockaddr.in.sin_family = AF_INET; - sockaddr_size = sizeof(struct sockaddr_in); - } else if (inet_pton(AF_INET6, address, &sockaddr.in6.sin6_addr) == 1) { - sockaddr.in6.sin6_family = AF_INET6; - sockaddr_size = sizeof(struct sockaddr_in6); - } else - return RETURN_INVALID_ARGS; - - for (str = services; (service = strtok_r(str, ",", &saveptr)); str = NULL) { - if (!NM_IN_STRSET(service, "dns", "files")) { - fprintf(stderr, "Unsupported resolver service '%s'\n", service); - continue; - } - -#if defined(__GLIBC__) - __nss_configure_lookup("hosts", service); -#endif - - ret = getnameinfo((struct sockaddr *) &sockaddr, - sockaddr_size, - name, - sizeof(name), - NULL, - 0, - NI_NAMEREQD); - - if (ret == 0) { - printf("%s", name); - return RETURN_SUCCESS; - } else if (ret == EAI_SYSTEM) { - char buf[1024]; - int errsv = errno; - - fprintf(stderr, - "getnameinfo() via service '%s' failed: %d (%s), system error: %d (%s)\n", - service, - ret, - gai_strerror(ret), - errsv, - _nm_strerror_r(errsv, buf, sizeof(buf))); - } else { - fprintf(stderr, - "getnameinfo() via service '%s' failed: %d (%s)\n", - service, - ret, - gai_strerror(ret)); - } -#if !defined(__GLIBC__) - break; -#endif - } - - return RETURN_ERROR; -} - -int -main(int argc, char **argv) -{ - nm_auto_free char *cmd = NULL; - - cmd = read_arg(); - if (!cmd) - return RETURN_INVALID_CMD; - - if (nm_streq(cmd, "version")) - return cmd_version(); - if (nm_streq(cmd, "resolve-address")) - return cmd_resolve_address(); - - return RETURN_INVALID_CMD; -} |