* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: client.c,v 1.258 2008/06/23 19:41:18 jinmei Exp $ */
+/* $Id: client.c,v 1.259 2008/11/16 20:57:54 marka Exp $ */
#include <config.h>
* + 2 bytes for NSID length
* + NSID itself
*/
- char nsid[BUFSIZ];
+ char nsid[BUFSIZ], *nsidp;
isc_buffer_t *buffer = NULL;
if (ns_g_server->server_usehostname) {
if (result != ISC_R_SUCCESS) {
goto no_nsid;
}
- } else {
- strncpy(nsid, ns_g_server->server_id, sizeof(nsid));
- }
+ nsidp = nsid;
+ } else
+ nsidp = ns_g_server->server_id;
- rdata->length = strlen(nsid) + 4;
+ rdata->length = strlen(nsidp) + 4;
result = isc_buffer_allocate(client->mctx, &buffer,
rdata->length);
if (result != ISC_R_SUCCESS)
goto no_nsid;
isc_buffer_putuint16(buffer, DNS_OPT_NSID);
- isc_buffer_putuint16(buffer, strlen(nsid));
- isc_buffer_putstr(buffer, nsid);
+ isc_buffer_putuint16(buffer, strlen(nsidp));
+ isc_buffer_putstr(buffer, nsidp);
rdata->data = buffer->base;
dns_message_takebuffer(client->message, &buffer);
} else {
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: check.c,v 1.93 2008/09/12 06:02:31 each Exp $ */
+/* $Id: check.c,v 1.94 2008/11/16 20:57:55 marka Exp $ */
/*! \file */
}
}
+ /*
+ * Check that server-id is not too long.
+ * 1024 bytes should be big enough.
+ */
+ obj = NULL;
+ (void)cfg_map_get(options, "server-id", &obj);
+ if (obj != NULL && cfg_obj_isstring(obj) &&
+ strlen(cfg_obj_asstring(obj)) > 1024) {
+ cfg_obj_log(obj, logctx, ISC_LOG_ERROR,
+ "'server-id' too big (>1024 bytes)");
+ result = ISC_R_FAILURE;
+ }
+
return (result);
}