mirror of
https://gitlab.isc.org/isc-projects/dhcp
synced 2025-09-01 23:05:29 +00:00
- Add a static operator indicating whether the client's lease is static.
This commit is contained in:
@@ -22,7 +22,7 @@
|
|||||||
|
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
static char copyright[] =
|
static char copyright[] =
|
||||||
"$Id: conflex.c,v 1.51 1999/07/19 15:32:54 mellon Exp $ Copyright (c) 1995, 1996, 1997, 1998, 1999 The Internet Software Consortium. All rights reserved.\n";
|
"$Id: conflex.c,v 1.52 1999/08/01 14:26:48 mellon Exp $ Copyright (c) 1995, 1996, 1997, 1998, 1999 The Internet Software Consortium. All rights reserved.\n";
|
||||||
#endif /* not lint */
|
#endif /* not lint */
|
||||||
|
|
||||||
#include "dhcpd.h"
|
#include "dhcpd.h"
|
||||||
@@ -668,6 +668,8 @@ static enum dhcp_token intern (atom, dfv)
|
|||||||
return SPAWN;
|
return SPAWN;
|
||||||
if (!strcasecmp (atom + 1, "pace"))
|
if (!strcasecmp (atom + 1, "pace"))
|
||||||
return SPACE;
|
return SPACE;
|
||||||
|
if (!strcasecmp (atom + 1, "tatic"))
|
||||||
|
return STATIC;
|
||||||
break;
|
break;
|
||||||
case 't':
|
case 't':
|
||||||
if (!strcasecmp (atom + 1, "imestamp"))
|
if (!strcasecmp (atom + 1, "imestamp"))
|
||||||
|
@@ -164,6 +164,13 @@ The \fBknown\fR expression returns true if the client whose request is
|
|||||||
currently being processed is known - that is, if there's a host
|
currently being processed is known - that is, if there's a host
|
||||||
declaration for it.
|
declaration for it.
|
||||||
.RE
|
.RE
|
||||||
|
.B static
|
||||||
|
.PP
|
||||||
|
.RS 0.25i
|
||||||
|
The \fBstatic\fR expression returns true if the lease assigned to the
|
||||||
|
client whose request is currently being processed is derived from a static
|
||||||
|
address assignment.
|
||||||
|
.RE
|
||||||
.SH DATA EXPRESSIONS
|
.SH DATA EXPRESSIONS
|
||||||
Several of the boolean expressions above depend on the results of
|
Several of the boolean expressions above depend on the results of
|
||||||
evaluating data expressions. A list of these expressions is provided
|
evaluating data expressions. A list of these expressions is provided
|
||||||
|
@@ -22,7 +22,7 @@
|
|||||||
|
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
static char copyright[] =
|
static char copyright[] =
|
||||||
"$Id: parse.c,v 1.35 1999/07/31 21:35:12 mellon Exp $ Copyright (c) 1995, 1996, 1997, 1998, 1999 The Internet Software Consortium. All rights reserved.\n";
|
"$Id: parse.c,v 1.36 1999/08/01 14:26:49 mellon Exp $ Copyright (c) 1995, 1996, 1997, 1998, 1999 The Internet Software Consortium. All rights reserved.\n";
|
||||||
#endif /* not lint */
|
#endif /* not lint */
|
||||||
|
|
||||||
#include "dhcpd.h"
|
#include "dhcpd.h"
|
||||||
@@ -1648,9 +1648,16 @@ int parse_non_binary (expr, cfile, lose, context)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case STATIC:
|
||||||
|
token = next_token (&val, cfile);
|
||||||
|
if (!expression_allocate (expr, "parse_expression: STATIC"))
|
||||||
|
log_fatal ("can't allocate expression");
|
||||||
|
(*expr) -> op = expr_static;
|
||||||
|
break;
|
||||||
|
|
||||||
case KNOWN:
|
case KNOWN:
|
||||||
token = next_token (&val, cfile);
|
token = next_token (&val, cfile);
|
||||||
if (!expression_allocate (expr, "parse_expression: EXISTS"))
|
if (!expression_allocate (expr, "parse_expression: KNOWN"))
|
||||||
log_fatal ("can't allocate expression");
|
log_fatal ("can't allocate expression");
|
||||||
(*expr) -> op = expr_known;
|
(*expr) -> op = expr_known;
|
||||||
break;
|
break;
|
||||||
|
@@ -22,7 +22,7 @@
|
|||||||
|
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
static char copyright[] =
|
static char copyright[] =
|
||||||
"$Id: tree.c,v 1.45 1999/07/31 23:24:32 mellon Exp $ Copyright (c) 1995, 1996, 1997, 1998 The Internet Software Consortium. All rights reserved.\n";
|
"$Id: tree.c,v 1.46 1999/08/01 14:26:48 mellon Exp $ Copyright (c) 1995, 1996, 1997, 1998 The Internet Software Consortium. All rights reserved.\n";
|
||||||
#endif /* not lint */
|
#endif /* not lint */
|
||||||
|
|
||||||
#include "dhcpd.h"
|
#include "dhcpd.h"
|
||||||
@@ -530,12 +530,29 @@ int evaluate_boolean_expression (result, packet, lease, in_options,
|
|||||||
*result = packet -> known;
|
*result = packet -> known;
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
|
case expr_static:
|
||||||
|
if (!lease || !(lease -> flags & STATIC_LEASE)) {
|
||||||
|
#if defined (DEBUG_EXPRESSIONS)
|
||||||
|
log_debug ("bool: static = false");
|
||||||
|
#endif
|
||||||
|
*result = 0;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
#if defined (DEBUG_EXPRESSIONS)
|
||||||
|
log_debug ("bool: static = true");
|
||||||
|
#endif
|
||||||
|
*result = 1;
|
||||||
|
return 1;
|
||||||
|
|
||||||
case expr_dns_update:
|
case expr_dns_update:
|
||||||
#if !defined (NSUPDATE)
|
#if !defined (NSUPDATE)
|
||||||
return 0;
|
return 0;
|
||||||
#else
|
#else
|
||||||
/* we only want to do this on a DHCPREQUEST */
|
/* we only want to do this on a DHCPREQUEST */
|
||||||
if (packet -> packet_type != DHCPREQUEST)
|
if (!packet || packet -> packet_type != DHCPREQUEST)
|
||||||
|
return 0;
|
||||||
|
/* no update for static leases */
|
||||||
|
if (lease && (lease -> flags & STATIC_LEASE))
|
||||||
return 0;
|
return 0;
|
||||||
memset (&rrtype, 0, sizeof expr1);
|
memset (&rrtype, 0, sizeof expr1);
|
||||||
s0 = evaluate_data_expression (&rrtype, packet, lease,
|
s0 = evaluate_data_expression (&rrtype, packet, lease,
|
||||||
@@ -1248,6 +1265,7 @@ int evaluate_data_expression (result, packet, lease,
|
|||||||
case expr_or:
|
case expr_or:
|
||||||
case expr_not:
|
case expr_not:
|
||||||
case expr_match:
|
case expr_match:
|
||||||
|
case expr_static:
|
||||||
case expr_known:
|
case expr_known:
|
||||||
log_error ("Boolean opcode in evaluate_data_expression: %d",
|
log_error ("Boolean opcode in evaluate_data_expression: %d",
|
||||||
expr -> op);
|
expr -> op);
|
||||||
@@ -1286,6 +1304,7 @@ int evaluate_numeric_expression (result, packet, lease,
|
|||||||
case expr_or:
|
case expr_or:
|
||||||
case expr_not:
|
case expr_not:
|
||||||
case expr_match:
|
case expr_match:
|
||||||
|
case expr_static:
|
||||||
case expr_known:
|
case expr_known:
|
||||||
log_error ("Boolean opcode in evaluate_numeric_expression: %d",
|
log_error ("Boolean opcode in evaluate_numeric_expression: %d",
|
||||||
expr -> op);
|
expr -> op);
|
||||||
@@ -1673,7 +1692,8 @@ int is_boolean_expression (expr)
|
|||||||
expr -> op == expr_or ||
|
expr -> op == expr_or ||
|
||||||
expr -> op == expr_dns_update ||
|
expr -> op == expr_dns_update ||
|
||||||
expr -> op == expr_not ||
|
expr -> op == expr_not ||
|
||||||
expr -> op == expr_known);
|
expr -> op == expr_known ||
|
||||||
|
expr -> op == expr_static);
|
||||||
}
|
}
|
||||||
|
|
||||||
int is_data_expression (expr)
|
int is_data_expression (expr)
|
||||||
@@ -1717,6 +1737,7 @@ static int op_val (op)
|
|||||||
switch (op) {
|
switch (op) {
|
||||||
case expr_none:
|
case expr_none:
|
||||||
case expr_match:
|
case expr_match:
|
||||||
|
case expr_static:
|
||||||
case expr_check:
|
case expr_check:
|
||||||
case expr_substring:
|
case expr_substring:
|
||||||
case expr_suffix:
|
case expr_suffix:
|
||||||
@@ -1773,6 +1794,7 @@ enum expression_context op_context (op)
|
|||||||
/* XXX Why aren't these specific? */
|
/* XXX Why aren't these specific? */
|
||||||
case expr_none:
|
case expr_none:
|
||||||
case expr_match:
|
case expr_match:
|
||||||
|
case expr_static:
|
||||||
case expr_check:
|
case expr_check:
|
||||||
case expr_substring:
|
case expr_substring:
|
||||||
case expr_suffix:
|
case expr_suffix:
|
||||||
|
@@ -193,6 +193,7 @@ enum dhcp_token {
|
|||||||
COMMIT = 411,
|
COMMIT = 411,
|
||||||
DNS_UPDATE = 412,
|
DNS_UPDATE = 412,
|
||||||
LEASE_TIME = 413,
|
LEASE_TIME = 413,
|
||||||
|
STATIC = 414,
|
||||||
};
|
};
|
||||||
|
|
||||||
#define is_identifier(x) ((x) >= FIRST_TOKEN && \
|
#define is_identifier(x) ((x) >= FIRST_TOKEN && \
|
||||||
|
@@ -91,6 +91,7 @@ enum expr_op {
|
|||||||
expr_pick_first_value,
|
expr_pick_first_value,
|
||||||
expr_lease_time,
|
expr_lease_time,
|
||||||
expr_dns_update,
|
expr_dns_update,
|
||||||
|
expr_static,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct expression {
|
struct expression {
|
||||||
|
Reference in New Issue
Block a user