* resource with the routine to process the record
* information.
*/
+
+/* Console "globals" */
+static struct res_items cons_items[] = {
+ {"name", store_name, ITEM(res_cons.hdr.name), 0, ITEM_REQUIRED, 0},
+ {"description", store_str, ITEM(res_cons.hdr.desc), 0, 0, 0},
+ {"rcfile", store_dir, ITEM(res_cons.rc_file), 0, 0, 0},
+ {"historyfile", store_dir, ITEM(res_cons.hist_file), 0, 0, 0},
+ {"requiressl", store_yesno, ITEM(res_cons.require_ssl), 1, ITEM_DEFAULT, 0},
+ {"password", store_password, ITEM(res_cons.password), 0, ITEM_REQUIRED, 0},
+ {NULL, NULL, NULL, 0, 0, 0}
+};
+
+
+/* Director's that we can contact */
static struct res_items dir_items[] = {
{"name", store_name, ITEM(res_dir.hdr.name), 0, ITEM_REQUIRED, 0},
{"description", store_str, ITEM(res_dir.hdr.desc), 0, 0, 0},
- {"dirport", store_int, ITEM(res_dir.DIRport), 0, ITEM_REQUIRED, 0},
- {"address", store_str, ITEM(res_dir.address), 0, ITEM_REQUIRED, 0},
+ {"dirport", store_int, ITEM(res_dir.DIRport), 0, ITEM_DEFAULT, 9101},
+ {"address", store_str, ITEM(res_dir.address), 0, 0, 0},
{"password", store_password, ITEM(res_dir.password), 0, ITEM_REQUIRED, 0},
+ {"enablessl", store_yesno, ITEM(res_dir.enable_ssl), 1, ITEM_DEFAULT, 0},
{NULL, NULL, NULL, 0, 0, 0}
};
* It must have one item for each of the resources.
*/
struct s_res resources[] = {
+ {"console", cons_items, R_CONSOLE, NULL},
{"director", dir_items, R_DIRECTOR, NULL},
{NULL, NULL, 0, NULL}
};
recurse = 0;
}
switch (type) {
+ case R_CONSOLE:
+ printf("Console: name=%s rcfile=%s histfile=%s\n", reshdr->name,
+ res->res_cons.rc_file, res->res_cons.hist_file);
+ break;
case R_DIRECTOR:
printf("Director: name=%s address=%s DIRport=%d\n", reshdr->name,
res->res_dir.address, res->res_dir.DIRport);
/* 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_CONSOLE:
+ if (res->res_cons.rc_file) {
+ free(res->res_cons.rc_file);
+ }
+ if (res->res_cons.hist_file) {
+ free(res->res_cons.hist_file);
+ }
case R_DIRECTOR:
if (res->res_dir.address)
free(res->res_dir.address);
{
URES *res;
int rindex = type - r_first;
- int i, size;
+ int i, size;
int error = 0;
/*
if (pass == 2) {
switch (type) {
/* Resources not containing a resource */
+ case R_CONSOLE:
case R_DIRECTOR:
break;
return;
}
+ /* The following code is only executed during pass 1 */
switch (type) {
+ case R_CONSOLE:
+ size = sizeof(CONRES);
+ break;
case R_DIRECTOR:
size = sizeof(DIRRES);
break;
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;
+ 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);
+ }
}
-
}