* Routines to authenticate access to a daemon (hosts allow/deny).
*
* Copyright (C) 1998 Andrew Tridgell
- * Copyright (C) 2004-2019 Wayne Davison
+ * Copyright (C) 2004-2022 Wayne Davison
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
*/
#include "rsync.h"
+#include "ifuncs.h"
+#ifdef HAVE_NETGROUP_H
+#include <netgroup.h>
+#endif
static int allow_forward_dns;
if (!host || !*host)
return 0;
+#ifdef HAVE_INNETGR
+ if (*tok == '@' && tok[1])
+ return innetgr(tok + 1, host, NULL, NULL);
+#endif
+
/* First check if the reverse-DNS-determined hostname matches. */
if (iwildmatch(tok, host))
return 1;
if (strcmp(addr, inet_ntoa(*(struct in_addr*)(hp->h_addr_list[i]))) == 0) {
/* If reverse lookups are off, we'll use the conf-specified
* hostname in preference to UNDETERMINED. */
- if (host == undetermined_hostname) {
- if (!(*host_ptr = strdup(tok)))
- *host_ptr = undetermined_hostname;
- }
+ if (host == undetermined_hostname)
+ *host_ptr = strdup(tok);
return 1;
}
}
break;
#ifdef INET6
- case PF_INET6:
- {
+ case PF_INET6: {
struct sockaddr_in6 *sin6a, *sin6t;
sin6a = (struct sockaddr_in6 *)resa->ai_addr;
addrlen = 16;
#ifdef HAVE_SOCKADDR_IN6_SCOPE_ID
- if (sin6t->sin6_scope_id &&
- sin6a->sin6_scope_id != sin6t->sin6_scope_id) {
+ if (sin6t->sin6_scope_id && sin6a->sin6_scope_id != sin6t->sin6_scope_id) {
ret = 0;
goto out;
}
#endif
break;
- }
+ }
#endif
default:
- rprintf(FLOG, "unknown family %u\n", rest->ai_family);
- ret = 0;
- goto out;
+ rprintf(FLOG, "unknown family %u\n", rest->ai_family);
+ ret = 0;
+ goto out;
}
bits = -1;
char *tok;
char *list2 = strdup(list);
- if (!list2)
- out_of_memory("access_match");
-
strlower(list2);
for (tok = strtok(list2, " ,\t"); tok; tok = strtok(NULL, " ,\t")) {