now be correctly written to dhcpd.leases.
- If a 'next-server' parameter is configured in a dynamic host record via
OMAPI as a domain name, the syntax written to disk is now correctly parsed
upon restart. [ISC-Bugs #22266]
client now adds the server to the reject list ACL and returns to INIT
state to hopefully find an RFC 2131 compliant server (or retry in INIT
forever). [ISC-Bugs #19660]
+
+- Parameters configured to evaluate from user defined function calls can
+ now be correctly written to dhcpd.leases (as on 'on events' or dynamic
+ host records inserted via OMAPI). [ISC-Bugs #22266]
+
+- If a 'next-server' parameter is configured in a dynamic host record via
+ OMAPI as a domain name, the syntax written to disk is now correctly parsed
+ upon restart. [ISC-Bugs #22266]
Changes since 4.2.1rc1
if (!strncasecmp(atom + 1, "et", 2)) {
if (!strcasecmp(atom + 3, "-lease-hostnames"))
return GET_LEASE_HOSTNAMES;
+ if (!strcasecmp(atom + 3, "hostbyname"))
+ return GETHOSTBYNAME;
if (!strcasecmp(atom + 3, "hostname"))
return GETHOSTNAME;
break;
goto norparen;
break;
+ case GETHOSTBYNAME:
+ token = next_token(&val, NULL, cfile);
+
+ token = next_token(NULL, NULL, cfile);
+ if (token != LPAREN)
+ goto nolparen;
+
+ /* The argument is a quoted string. */
+ token = next_token(&val, NULL, cfile);
+ if (token != STRING) {
+ parse_warn(cfile, "Expecting quoted literal: "
+ "\"foo.example.com\"");
+ skip_to_semi(cfile);
+ *lose = 1;
+ return 0;
+ }
+ if (!make_host_lookup(expr, val))
+ log_fatal("Error creating gethostbyname() internal "
+ "record. (%s:%d)", MDL);
+
+ token = next_token(NULL, NULL, cfile);
+ if (token != RPAREN)
+ goto norparen;
+ break;
+
/* Not a valid start to an expression... */
default:
if (token != NAME && token != NUMBER_OR_NAME)
"gethostname()");
break;
+ case expr_funcall:
+ col = token_print_indent(file, indent, indent, "", "",
+ expr->data.funcall.name);
+ col = token_print_indent(file, col, indent, " ", "", "(");
+
+ firstp = 1;
+ e = expr->data.funcall.arglist;
+ while (e != NULL) {
+ if (!firstp)
+ col = token_print_indent(file, col, indent,
+ "", " ", ",");
+
+ col = write_expression(file, e->data.arg.val, col,
+ indent, firstp);
+ firstp = 0;
+ e = e->data.arg.next;
+ }
+
+ col = token_print_indent(file, col, indent, "", "", ")");
+ break;
+
default:
log_fatal ("invalid expression type in print_expression: %d",
expr -> op);
AUTO_PARTNER_DOWN = 661,
GETHOSTNAME = 662,
REWIND = 663,
- INITIAL_DELAY = 664
+ INITIAL_DELAY = 664,
+ GETHOSTBYNAME = 665
};
#define is_identifier(x) ((x) >= FIRST_TOKEN && \