* for the resource records.
*
* Kern Sibbald, September MM
+ *
+ * Version $Id$
*/
/*
Copyright (C) 2000, 2001, 2002 Kern Sibbald and John Walker
/* Client or File daemon "Global" resources */
static struct res_items cli_items[] = {
- {"name", store_name, ITEM(res_client.hdr.name), 0, ITEM_REQUIRED, 0},
+ {"name", store_name, ITEM(res_client.hdr.name), 0, ITEM_REQUIRED, 0},
{"description", store_str, ITEM(res_client.hdr.desc), 0, 0, 0},
- {"fdport", store_pint, ITEM(res_client.FDport), 0, ITEM_REQUIRED, 0},
- {"workingdirectory", store_dir, ITEM(res_client.working_directory), 0, ITEM_REQUIRED, 0},
- {"piddirectory", store_dir, ITEM(res_client.pid_directory), 0, ITEM_REQUIRED, 0},
- {"subsysdirectory", store_dir, ITEM(res_client.subsys_directory), 0, ITEM_REQUIRED, 0},
+ {"fdport", store_pint, ITEM(res_client.FDport), 0, ITEM_DEFAULT, 9102},
+ {"fdaddress", store_str, ITEM(res_client.FDaddr), 0, 0, 0},
+ {"workingdirectory", store_dir, ITEM(res_client.working_directory), 0, ITEM_REQUIRED, 0},
+ {"piddirectory", store_dir, ITEM(res_client.pid_directory), 0, ITEM_REQUIRED, 0},
+ {"subsysdirectory", store_dir, ITEM(res_client.subsys_directory), 0, 0, 0},
+ {"requiressl", store_yesno, ITEM(res_client.require_ssl), 1, ITEM_DEFAULT, 0},
+ {"maximumconcurrentjobs", store_pint, ITEM(res_client.MaxConcurrentJobs), 0, ITEM_DEFAULT, 10},
+ {"messages", store_res, ITEM(res_client.messages), R_MSGS, 0, 0},
+ {"heartbeatinterval", store_time, ITEM(res_client.heartbeat_interval), 0, ITEM_DEFAULT, 0},
+ {"sdconnecttimeout", store_time,ITEM(res_client.SDConnectTimeout), 0, ITEM_DEFAULT, 60 * 30},
{NULL, NULL, NULL, 0, 0, 0}
};
{"description", store_str, ITEM(res_dir.hdr.desc), 0, 0, 0},
{"password", store_password, ITEM(res_dir.password), 0, ITEM_REQUIRED, 0},
{"address", store_str, ITEM(res_dir.address), 0, 0, 0},
+ {"enablessl", store_yesno, ITEM(res_dir.enable_ssl),1, ITEM_DEFAULT, 0},
{NULL, NULL, NULL, 0, 0, 0}
};
break;
case R_MSGS:
sendit(sock, "Messages: name=%s\n", res->res_msgs.hdr.name);
+ if (res->res_msgs.mail_cmd)
+ sendit(sock, " mailcmd=%s\n", res->res_msgs.mail_cmd);
+ if (res->res_msgs.operator_cmd)
+ sendit(sock, " opcmd=%s\n", res->res_msgs.operator_cmd);
break;
default:
sendit(sock, "Unknown resource type %d\n", type);
/* common stuff -- free the resource name */
nres = (RES *)res->res_dir.hdr.next;
- if (res->res_dir.hdr.name)
+ if (res->res_dir.hdr.name) {
free(res->res_dir.hdr.name);
- if (res->res_dir.hdr.desc)
+ }
+ if (res->res_dir.hdr.desc) {
free(res->res_dir.hdr.desc);
+ }
switch (type) {
case R_DIRECTOR:
- if (res->res_dir.password)
+ if (res->res_dir.password) {
free(res->res_dir.password);
- if (res->res_dir.address)
+ }
+ if (res->res_dir.address) {
free(res->res_dir.address);
+ }
break;
case R_CLIENT:
- if (res->res_client.working_directory)
+ if (res->res_client.working_directory) {
free(res->res_client.working_directory);
- if (res->res_client.pid_directory)
+ }
+ if (res->res_client.pid_directory) {
free(res->res_client.pid_directory);
- if (res->res_client.subsys_directory)
+ }
+ if (res->res_client.subsys_directory) {
free(res->res_client.subsys_directory);
+ }
+ if (res->res_client.FDaddr) {
+ free(res->res_client.FDaddr);
+ }
break;
case R_MSGS:
if (res->res_msgs.mail_cmd)
free(res->res_msgs.mail_cmd);
if (res->res_msgs.operator_cmd)
free(res->res_msgs.operator_cmd);
+ free_msgs_res((MSGS *)res); /* free message resource */
+ res = NULL;
break;
default:
printf("Unknown resource type %d\n", type);
}
/* Common stuff again -- free the resource, recurse to next one */
- free(res);
+ if (res) {
+ free(res);
+ }
resources[rindex].res_head = nres;
if (nres) {
free_resource(type);
/* Resources not containing a resource */
case R_MSGS:
case R_DIRECTOR:
- case R_CLIENT:
break;
+ /* Resources containing another resource */
+ case R_CLIENT:
+ if ((res = (URES *)GetResWithName(R_CLIENT, res_all.res_dir.hdr.name)) == NULL) {
+ Emsg1(M_ABORT, 0, "Cannot find Client resource %s\n", res_all.res_dir.hdr.name);
+ }
+ res->res_client.messages = res_all.res_client.messages;
+ break;
default:
Emsg1(M_ERROR, 0, _("Unknown resource type %d\n"), type);
error = 1;
return;
}
+ /* The following code is only executed on pass 1 */
switch (type) {
case R_DIRECTOR:
size = sizeof(DIRRES);
default:
printf(_("Unknown resource type %d\n"), type);
error = 1;
+ size = 1;
break;
}
/* Common */
if (!error) {
- res = (URES *) malloc(size);
+ res = (URES *)malloc(size);
memcpy(res, &res_all, size);
- res->res_dir.hdr.next = resources[rindex].res_head;
- resources[rindex].res_head = (RES *)res;
- Dmsg1(90, "dir_conf: inserting res: %s\n", res->res_dir.hdr.name);
+ if (!resources[rindex].res_head) {
+ resources[rindex].res_head = (RES *)res; /* store first entry */
+ } else {
+ RES *next;
+ /* Add new res to end of chain */
+ for (next=resources[rindex].res_head; next->next; next=next->next) {
+ if (strcmp(next->name, res->res_dir.hdr.name) == 0) {
+ Emsg2(M_ERROR_TERM, 0,
+ _("Attempt to define second %s resource named \"%s\" is not permitted.\n"),
+ resources[rindex].name, res->res_dir.hdr.name);
+ }
+ }
+ next->next = (RES *)res;
+ Dmsg2(90, "Inserting %s res: %s\n", res_to_str(type),
+ res->res_dir.hdr.name);
+ }
}
-
}