|
Packit Service |
392537 |
/*
|
|
Packit Service |
392537 |
* Copyright (c) 1998,1999,2000
|
|
Packit Service |
392537 |
* Traakan, Inc., Los Altos, CA
|
|
Packit Service |
392537 |
* All rights reserved.
|
|
Packit Service |
392537 |
*
|
|
Packit Service |
392537 |
* Redistribution and use in source and binary forms, with or without
|
|
Packit Service |
392537 |
* modification, are permitted provided that the following conditions
|
|
Packit Service |
392537 |
* are met:
|
|
Packit Service |
392537 |
* 1. Redistributions of source code must retain the above copyright
|
|
Packit Service |
392537 |
* notice unmodified, this list of conditions, and the following
|
|
Packit Service |
392537 |
* disclaimer.
|
|
Packit Service |
392537 |
* 2. Redistributions in binary form must reproduce the above copyright
|
|
Packit Service |
392537 |
* notice, this list of conditions and the following disclaimer in the
|
|
Packit Service |
392537 |
* documentation and/or other materials provided with the distribution.
|
|
Packit Service |
392537 |
*
|
|
Packit Service |
392537 |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
|
Packit Service |
392537 |
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
Packit Service |
392537 |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
Packit Service |
392537 |
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
|
Packit Service |
392537 |
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
Packit Service |
392537 |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
Packit Service |
392537 |
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
Packit Service |
392537 |
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
Packit Service |
392537 |
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
Packit Service |
392537 |
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
Packit Service |
392537 |
* SUCH DAMAGE.
|
|
Packit Service |
392537 |
*/
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
/*
|
|
Packit Service |
392537 |
* Project: NDMJOB
|
|
Packit Service |
392537 |
* Ident: $Id: $
|
|
Packit Service |
392537 |
*
|
|
Packit Service |
392537 |
* Description:
|
|
Packit Service |
392537 |
*
|
|
Packit Service |
392537 |
*/
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
#include "ndmjob.h"
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
#ifndef NDMOS_OPTION_NO_CONTROL_AGENT
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
int
|
|
Packit Service |
392537 |
build_job (void)
|
|
Packit Service |
392537 |
{
|
|
Packit Service |
392537 |
struct ndm_job_param * job = &the_job;
|
|
Packit Service |
392537 |
int i, rc, n_err;
|
|
Packit Service |
392537 |
char errbuf[100];
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
NDMOS_MACRO_ZEROFILL(job);
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
args_to_job ();
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
ndma_job_auto_adjust (job);
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
if (o_rules)
|
|
Packit Service |
392537 |
apply_rules (job, o_rules);
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
i = n_err = 0;
|
|
Packit Service |
392537 |
do {
|
|
Packit Service |
392537 |
rc = ndma_job_audit (job, errbuf, i);
|
|
Packit Service |
392537 |
if (rc > n_err || rc < 0) {
|
|
Packit Service |
392537 |
ndmjob_log (0, "error: %s", errbuf);
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
n_err = rc;
|
|
Packit Service |
392537 |
} while (i++ < n_err);
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
if (n_err) {
|
|
Packit Service |
392537 |
error_byebye ("can't proceed");
|
|
Packit Service |
392537 |
/* no return */
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
return 0;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
int
|
|
Packit Service |
392537 |
args_to_job (void)
|
|
Packit Service |
392537 |
{
|
|
Packit Service |
392537 |
struct ndm_job_param * job = &the_job;
|
|
Packit Service |
392537 |
int i;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
switch (the_mode) {
|
|
Packit Service |
392537 |
case NDM_JOB_OP_QUERY_AGENTS:
|
|
Packit Service |
392537 |
case NDM_JOB_OP_INIT_LABELS:
|
|
Packit Service |
392537 |
case NDM_JOB_OP_LIST_LABELS:
|
|
Packit Service |
392537 |
case NDM_JOB_OP_REMEDY_ROBOT:
|
|
Packit Service |
392537 |
case NDM_JOB_OP_TEST_TAPE:
|
|
Packit Service |
392537 |
case NDM_JOB_OP_TEST_MOVER:
|
|
Packit Service |
392537 |
case NDM_JOB_OP_TEST_DATA:
|
|
Packit Service |
392537 |
case NDM_JOB_OP_REWIND_TAPE:
|
|
Packit Service |
392537 |
case NDM_JOB_OP_EJECT_TAPE:
|
|
Packit Service |
392537 |
case NDM_JOB_OP_MOVE_TAPE:
|
|
Packit Service |
392537 |
case NDM_JOB_OP_IMPORT_TAPE:
|
|
Packit Service |
392537 |
case NDM_JOB_OP_EXPORT_TAPE:
|
|
Packit Service |
392537 |
case NDM_JOB_OP_LOAD_TAPE:
|
|
Packit Service |
392537 |
case NDM_JOB_OP_UNLOAD_TAPE:
|
|
Packit Service |
392537 |
case NDM_JOB_OP_INIT_ELEM_STATUS:
|
|
Packit Service |
392537 |
break;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
case NDM_JOB_OP_BACKUP:
|
|
Packit Service |
392537 |
args_to_job_backup_env();
|
|
Packit Service |
392537 |
break;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
case NDM_JOB_OP_TOC:
|
|
Packit Service |
392537 |
args_to_job_recover_env();
|
|
Packit Service |
392537 |
args_to_job_recover_nlist();
|
|
Packit Service |
392537 |
if (J_index_file) {
|
|
Packit Service |
392537 |
jndex_doit();
|
|
Packit Service |
392537 |
jndex_merge_environment();
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
break;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
case NDM_JOB_OP_EXTRACT:
|
|
Packit Service |
392537 |
args_to_job_recover_env();
|
|
Packit Service |
392537 |
args_to_job_recover_nlist();
|
|
Packit Service |
392537 |
jndex_doit();
|
|
Packit Service |
392537 |
jndex_merge_environment();
|
|
Packit Service |
392537 |
break;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
case 'D': /* -o daemon */
|
|
Packit Service |
392537 |
return 0;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
default:
|
|
Packit Service |
392537 |
printf ("mode -%c not implemented yet\n", the_mode);
|
|
Packit Service |
392537 |
break;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
job->operation = the_mode;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
/* DATA agent */
|
|
Packit Service |
392537 |
job->data_agent = D_data_agent;
|
|
Packit Service |
392537 |
job->bu_type = B_bu_type;
|
|
Packit Service |
392537 |
for (i = 0; i < nn_E_environment; i++)
|
|
Packit Service |
392537 |
job->env_tab.env[i] = E_environment[i];
|
|
Packit Service |
392537 |
job->env_tab.n_env = nn_E_environment;
|
|
Packit Service |
392537 |
if (the_mode == NDM_JOB_OP_EXTRACT || the_mode == NDM_JOB_OP_TOC) {
|
|
Packit Service |
392537 |
for (i = 0; (i < n_file_arg) && (i < NDM_MAX_NLIST); i++) {
|
|
Packit Service |
392537 |
job->nlist_tab.nlist[i] = nlist[i];
|
|
Packit Service |
392537 |
job->nlist_tab.nlist_new[i] = nlist_new[i];
|
|
Packit Service |
392537 |
job->nlist_tab.n_nlist = i + 1;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
job->index_log.deliver = ndmjob_ixlog_deliver;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
/* TAPE agent */
|
|
Packit Service |
392537 |
job->tape_agent = T_tape_agent;
|
|
Packit Service |
392537 |
job->tape_device = f_tape_device;
|
|
Packit Service |
392537 |
job->record_size = b_bsize * 512;
|
|
Packit Service |
392537 |
job->tape_timeout = o_tape_timeout;
|
|
Packit Service |
392537 |
job->use_eject = o_use_eject;
|
|
Packit Service |
392537 |
job->tape_target = o_tape_scsi;
|
|
Packit Service |
392537 |
job->tape_tcp = o_tape_tcp;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
/* ROBOT agent */
|
|
Packit Service |
392537 |
job->robot_agent = R_robot_agent;
|
|
Packit Service |
392537 |
job->robot_target = r_robot_target;
|
|
Packit Service |
392537 |
job->robot_timeout = o_robot_timeout;
|
|
Packit Service |
392537 |
if (o_tape_addr >= 0) {
|
|
Packit Service |
392537 |
job->drive_addr = o_tape_addr;
|
|
Packit Service |
392537 |
job->drive_addr_given = 1;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
if (o_from_addr >= 0) {
|
|
Packit Service |
392537 |
job->from_addr = o_from_addr;
|
|
Packit Service |
392537 |
job->from_addr_given = 1;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
if (o_to_addr >= 0) {
|
|
Packit Service |
392537 |
job->to_addr = o_to_addr;
|
|
Packit Service |
392537 |
job->to_addr_given = 1;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
if (ROBOT_GIVEN())
|
|
Packit Service |
392537 |
job->have_robot = 1;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
/* media */
|
|
Packit Service |
392537 |
for (i = 0; i < n_m_media; i++)
|
|
Packit Service |
392537 |
job->media_tab.media[i] = m_media[i];
|
|
Packit Service |
392537 |
job->media_tab.n_media = n_m_media;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
return 0;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
int
|
|
Packit Service |
392537 |
args_to_job_backup_env (void)
|
|
Packit Service |
392537 |
{
|
|
Packit Service |
392537 |
int n_env = n_E_environment;
|
|
Packit Service |
392537 |
int i;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
if (C_chdir) {
|
|
Packit Service |
392537 |
E_environment[n_env].name = "FILESYSTEM";
|
|
Packit Service |
392537 |
E_environment[n_env].value = C_chdir;
|
|
Packit Service |
392537 |
n_env++;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
E_environment[n_env].name = "HIST";
|
|
Packit Service |
392537 |
E_environment[n_env].value = I_index_file ? "y" : "n";
|
|
Packit Service |
392537 |
n_env++;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
E_environment[n_env].name = "TYPE";
|
|
Packit Service |
392537 |
E_environment[n_env].value = B_bu_type;
|
|
Packit Service |
392537 |
n_env++;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
if (U_user) {
|
|
Packit Service |
392537 |
E_environment[n_env].name = "USER";
|
|
Packit Service |
392537 |
E_environment[n_env].value = U_user;
|
|
Packit Service |
392537 |
n_env++;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
for (i = 0; (i < n_e_exclude_pattern) && (n_env < NDM_MAX_ENV-2); i++) {
|
|
Packit Service |
392537 |
E_environment[n_env].name = "EXCLUDE";
|
|
Packit Service |
392537 |
E_environment[n_env].value = e_exclude_pattern[i];
|
|
Packit Service |
392537 |
n_env++;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
for (i = 0; (i < n_file_arg) && (n_env < NDM_MAX_ENV-1); i++) {
|
|
Packit Service |
392537 |
E_environment[n_env].name = "FILES";
|
|
Packit Service |
392537 |
E_environment[n_env].value = file_arg[i];
|
|
Packit Service |
392537 |
n_env++;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
if (o_rules) {
|
|
Packit Service |
392537 |
E_environment[n_env].name = "RULES";
|
|
Packit Service |
392537 |
E_environment[n_env].value = o_rules;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
nn_E_environment = n_env;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
return n_env;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
int
|
|
Packit Service |
392537 |
args_to_job_recover_env (void)
|
|
Packit Service |
392537 |
{
|
|
Packit Service |
392537 |
int n_env = n_E_environment;
|
|
Packit Service |
392537 |
int i;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
if (C_chdir) {
|
|
Packit Service |
392537 |
E_environment[n_env].name = "PREFIX";
|
|
Packit Service |
392537 |
E_environment[n_env].value = C_chdir;
|
|
Packit Service |
392537 |
n_env++;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
E_environment[n_env].name = "HIST";
|
|
Packit Service |
392537 |
E_environment[n_env].value = I_index_file ? "y" : "n";
|
|
Packit Service |
392537 |
n_env++;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
E_environment[n_env].name = "TYPE";
|
|
Packit Service |
392537 |
E_environment[n_env].value = B_bu_type;
|
|
Packit Service |
392537 |
n_env++;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
if (U_user) {
|
|
Packit Service |
392537 |
E_environment[n_env].name = "USER";
|
|
Packit Service |
392537 |
E_environment[n_env].value = U_user;
|
|
Packit Service |
392537 |
n_env++;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
for (i = 0; i < n_e_exclude_pattern; i++) {
|
|
Packit Service |
392537 |
E_environment[n_env].name = "EXCLUDE";
|
|
Packit Service |
392537 |
E_environment[n_env].value = e_exclude_pattern[i];
|
|
Packit Service |
392537 |
n_env++;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
if (o_rules) {
|
|
Packit Service |
392537 |
E_environment[n_env].name = "RULES";
|
|
Packit Service |
392537 |
E_environment[n_env].value = o_rules;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
nn_E_environment = n_env;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
/* file_arg[]s are done in nlist[] */
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
jndex_merge_environment ();
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
return nn_E_environment;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
void
|
|
Packit Service |
392537 |
normalize_name (char *name)
|
|
Packit Service |
392537 |
{
|
|
Packit Service |
392537 |
char * p = name;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
while (*p) {
|
|
Packit Service |
392537 |
if (*p == '/' && p[1] == '/') {
|
|
Packit Service |
392537 |
strcpy (p, p+1);
|
|
Packit Service |
392537 |
continue;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
if (p[0] == '/' && p[1] == '.' && (p[2] == '/' || p[2] == 0)) {
|
|
Packit Service |
392537 |
strcpy (p, p+2);
|
|
Packit Service |
392537 |
continue;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
p++;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
int
|
|
Packit Service |
392537 |
args_to_job_recover_nlist (void)
|
|
Packit Service |
392537 |
{
|
|
Packit Service |
392537 |
int not_found = 0;
|
|
Packit Service |
392537 |
int i, prefix_len, len;
|
|
Packit Service |
392537 |
char * dest;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
if (C_chdir) {
|
|
Packit Service |
392537 |
prefix_len = strlen (C_chdir) + 2;
|
|
Packit Service |
392537 |
} else {
|
|
Packit Service |
392537 |
prefix_len = 0;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
for (i = 0; (i < n_file_arg) && (i < NDM_MAX_NLIST); i++) {
|
|
Packit Service |
392537 |
if (file_arg_new[i]) {
|
|
Packit Service |
392537 |
len = strlen (file_arg_new[i]) + prefix_len + 1;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
dest = NDMOS_API_MALLOC (len);
|
|
Packit Service |
392537 |
*dest = 0;
|
|
Packit Service |
392537 |
if (C_chdir) {
|
|
Packit Service |
392537 |
strcpy (dest, C_chdir);
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
if (file_arg_new[i][0] != '/') {
|
|
Packit Service |
392537 |
strcat (dest, "/");
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
strcat (dest, file_arg_new[i]);
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
normalize_name (file_arg_new[i]);
|
|
Packit Service |
392537 |
normalize_name (file_arg[i]);
|
|
Packit Service |
392537 |
normalize_name (dest);
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
nlist[i].original_path = file_arg[i];
|
|
Packit Service |
392537 |
nlist[i].destination_path = dest;
|
|
Packit Service |
392537 |
} else {
|
|
Packit Service |
392537 |
len = strlen (file_arg[i]) + prefix_len + 1;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
dest = NDMOS_API_MALLOC (len);
|
|
Packit Service |
392537 |
*dest = 0;
|
|
Packit Service |
392537 |
if (C_chdir) {
|
|
Packit Service |
392537 |
strcpy (dest, C_chdir);
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
if (file_arg[i][0] != '/') {
|
|
Packit Service |
392537 |
strcat (dest, "/");
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
strcat (dest, file_arg[i]);
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
normalize_name (file_arg[i]);
|
|
Packit Service |
392537 |
normalize_name (dest);
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
nlist[i].original_path = file_arg[i];
|
|
Packit Service |
392537 |
nlist[i].destination_path = dest;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
return not_found; /* should ALWAYS be 0 */
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
/*
|
|
Packit Service |
392537 |
* Index files are sequentially searched. They can be VERY big.
|
|
Packit Service |
392537 |
* There is a credible effort for efficiency here.
|
|
Packit Service |
392537 |
* Probably lots and lots and lots of room for improvement.
|
|
Packit Service |
392537 |
*/
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
FILE * jndex_open (void);
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
int
|
|
Packit Service |
392537 |
jndex_doit (void)
|
|
Packit Service |
392537 |
{
|
|
Packit Service |
392537 |
FILE * fp;
|
|
Packit Service |
392537 |
int rc;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
fp = jndex_open();
|
|
Packit Service |
392537 |
if (!fp) {
|
|
Packit Service |
392537 |
/* error messages already given */
|
|
Packit Service |
392537 |
return -1;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
ndmjob_log (1, "Processing input index (-J%s)", J_index_file);
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
if (n_file_arg > 0) {
|
|
Packit Service |
392537 |
rc = ndmfhdb_add_fh_info_to_nlist (fp, nlist, n_file_arg);
|
|
Packit Service |
392537 |
if (rc < 0) {
|
|
Packit Service |
392537 |
/* toast one way or another */
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
jndex_fetch_post_backup_data_env(fp);
|
|
Packit Service |
392537 |
jndex_fetch_post_backup_media(fp);
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
jndex_tattle();
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
if (jndex_audit_not_found ()) {
|
|
Packit Service |
392537 |
ndmjob_log (1,
|
|
Packit Service |
392537 |
"Warning: Missing index entries, valid file name(s)?");
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
jndex_merge_media ();
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
fclose(fp);
|
|
Packit Service |
392537 |
return 0;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
FILE *
|
|
Packit Service |
392537 |
jndex_open (void)
|
|
Packit Service |
392537 |
{
|
|
Packit Service |
392537 |
char buf[256];
|
|
Packit Service |
392537 |
FILE * fp;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
if (!J_index_file) {
|
|
Packit Service |
392537 |
/* Hmmm. */
|
|
Packit Service |
392537 |
ndmjob_log (1, "Warning: No -J input index?");
|
|
Packit Service |
392537 |
return 0;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
ndmjob_log (1, "Reading input index (-I%s)", J_index_file);
|
|
Packit Service |
392537 |
fp = fopen(J_index_file, "r");
|
|
Packit Service |
392537 |
if (!fp) {
|
|
Packit Service |
392537 |
perror (J_index_file);
|
|
Packit Service |
392537 |
error_byebye ("Can not open -J%s input index", J_index_file);
|
|
Packit Service |
392537 |
/* no return */
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
if (fgets (buf, sizeof buf, fp) == NULL) {
|
|
Packit Service |
392537 |
fclose (fp);
|
|
Packit Service |
392537 |
error_byebye ("Failed read 1st line of -J%s", J_index_file);
|
|
Packit Service |
392537 |
/* no return */
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
if (strcmp (buf, "##ndmjob -I\n") != 0) {
|
|
Packit Service |
392537 |
fclose (fp);
|
|
Packit Service |
392537 |
error_byebye ("Bad 1st line in -J%s", J_index_file);
|
|
Packit Service |
392537 |
/* no return */
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
if (fgets (buf, sizeof buf, fp) == NULL) {
|
|
Packit Service |
392537 |
fclose (fp);
|
|
Packit Service |
392537 |
error_byebye ("Failed read 2nd line of -J%s", J_index_file);
|
|
Packit Service |
392537 |
/* no return */
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
if (strcmp (buf, "##ndmjob -J\n") != 0) {
|
|
Packit Service |
392537 |
fclose (fp);
|
|
Packit Service |
392537 |
error_byebye ("Bad 2nd line in -J%s", J_index_file);
|
|
Packit Service |
392537 |
/* no return */
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
ndmjob_log (2, "Opened index (-J%s)", J_index_file);
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
return fp;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
int
|
|
Packit Service |
392537 |
jndex_tattle (void)
|
|
Packit Service |
392537 |
{
|
|
Packit Service |
392537 |
char buf[100];
|
|
Packit Service |
392537 |
int i;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
for (i = 0; i < n_ji_media; i++) {
|
|
Packit Service |
392537 |
struct ndmmedia * me = &ji_media[i];
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
ndmmedia_to_str (me, buf);
|
|
Packit Service |
392537 |
ndmjob_log (3, "ji me[%d] %s", i, buf);
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
for (i = 0; i < n_ji_environment; i++) {
|
|
Packit Service |
392537 |
ndmp9_pval * pv = &ji_environment[i];
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
ndmjob_log (3, "ji env[%d] %s=%s", i, pv->name, pv->value);
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
for (i = 0; (i < n_file_arg) && (i < NDM_MAX_NLIST); i++) {
|
|
Packit Service |
392537 |
if (nlist[i].fh_info.valid) {
|
|
Packit Service |
392537 |
ndmjob_log (3, "ji fil[%d] fi=%lld %s",
|
|
Packit Service |
392537 |
i, nlist[i].fh_info.value, file_arg[i]);
|
|
Packit Service |
392537 |
} else {
|
|
Packit Service |
392537 |
ndmjob_log (3, "ji fil[%d] not-found %s",
|
|
Packit Service |
392537 |
i, file_arg[i]);
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
return 0;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
int
|
|
Packit Service |
392537 |
jndex_merge_media (void)
|
|
Packit Service |
392537 |
{
|
|
Packit Service |
392537 |
struct ndmmedia * me;
|
|
Packit Service |
392537 |
struct ndmmedia * jme;
|
|
Packit Service |
392537 |
int i, j;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
for (j = 0; j < n_ji_media; j++) {
|
|
Packit Service |
392537 |
jme = &ji_media[j];
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
if (! jme->valid_label)
|
|
Packit Service |
392537 |
continue; /* can't match it up */
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
for (i = 0; i < n_m_media; i++) {
|
|
Packit Service |
392537 |
me = &m_media[i];
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
if (! me->valid_label)
|
|
Packit Service |
392537 |
continue; /* can't match it up */
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
if (strcmp (jme->label, me->label) != 0)
|
|
Packit Service |
392537 |
continue;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
if (!jme->valid_slot && me->valid_slot) {
|
|
Packit Service |
392537 |
jme->slot_addr = me->slot_addr;
|
|
Packit Service |
392537 |
jme->valid_slot = 1;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
for (i = 0; i < n_ji_media; i++) {
|
|
Packit Service |
392537 |
m_media[i] = ji_media[i];
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
n_m_media = i;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
ndmjob_log (3, "After merging input -J index with -m entries");
|
|
Packit Service |
392537 |
for (i = 0; i < n_m_media; i++) {
|
|
Packit Service |
392537 |
char buf[40];
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
me = &m_media[i];
|
|
Packit Service |
392537 |
ndmmedia_to_str (me, buf);
|
|
Packit Service |
392537 |
ndmjob_log (3, "%d: -m %s", i+1, buf);
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
return 0;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
int
|
|
Packit Service |
392537 |
jndex_audit_not_found (void)
|
|
Packit Service |
392537 |
{
|
|
Packit Service |
392537 |
int i;
|
|
Packit Service |
392537 |
int not_found = 0;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
for (i = 0; (i < n_file_arg) && (i < NDM_MAX_NLIST); i++) {
|
|
Packit Service |
392537 |
if (!nlist[i].fh_info.valid) {
|
|
Packit Service |
392537 |
ndmjob_log (0, "No index entry for %s", file_arg[i]);
|
|
Packit Service |
392537 |
not_found++;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
return not_found;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
int
|
|
Packit Service |
392537 |
jndex_merge_environment (void)
|
|
Packit Service |
392537 |
{
|
|
Packit Service |
392537 |
int i;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
for (i = 0; i < n_ji_environment; i++) {
|
|
Packit Service |
392537 |
if (strcmp(ji_environment[i].name, "FILESYSTEM") != 0 &&
|
|
Packit Service |
392537 |
strcmp(ji_environment[i].name, "PREFIX") != 0 &&
|
|
Packit Service |
392537 |
strcmp(ji_environment[i].name, "HIST") != 0 &&
|
|
Packit Service |
392537 |
strcmp(ji_environment[i].name, "TYPE") != 0) {
|
|
Packit Service |
392537 |
E_environment[nn_E_environment++] = ji_environment[i];
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
return 0;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
int
|
|
Packit Service |
392537 |
jndex_fetch_post_backup_data_env (FILE *fp)
|
|
Packit Service |
392537 |
{
|
|
Packit Service |
392537 |
int rc;
|
|
Packit Service |
392537 |
char buf[512];
|
|
Packit Service |
392537 |
char * p;
|
|
Packit Service |
392537 |
char * q;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
rc = ndmbstf_first (fp, "DE ", buf, sizeof buf);
|
|
Packit Service |
392537 |
if (rc <= 0) {
|
|
Packit Service |
392537 |
return rc; /* error or not found */
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
/* DE HIST=Yes */
|
|
Packit Service |
392537 |
while (buf[0] == 'D' && buf[1] == 'E' && buf[2] == ' ') {
|
|
Packit Service |
392537 |
if (n_ji_environment >= NDM_MAX_ENV) {
|
|
Packit Service |
392537 |
goto overflow;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
p = &buf[2];
|
|
Packit Service |
392537 |
while (*p == ' ') p++;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
if (!strchr (p, '=')) {
|
|
Packit Service |
392537 |
goto malformed;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
p = NDMOS_API_STRDUP (p);
|
|
Packit Service |
392537 |
q = strchr (p, '=');
|
|
Packit Service |
392537 |
if (!q) {
|
|
Packit Service |
392537 |
goto malformed;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
*q++ = 0;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
ji_environment[n_ji_environment].name = p;
|
|
Packit Service |
392537 |
ji_environment[n_ji_environment].value = q;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
n_ji_environment++;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
rc = ndmbstf_getline (fp, buf, sizeof buf);
|
|
Packit Service |
392537 |
if (rc <= 0) {
|
|
Packit Service |
392537 |
break;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
continue;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
malformed:
|
|
Packit Service |
392537 |
ndmjob_log (1, "Malformed in -J%s: %s", J_index_file, buf);
|
|
Packit Service |
392537 |
continue;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
overflow:
|
|
Packit Service |
392537 |
ndmjob_log (1, "Overflow in -J%s: %s", J_index_file, buf);
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
return 0;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
int
|
|
Packit Service |
392537 |
jndex_fetch_post_backup_media (FILE *fp)
|
|
Packit Service |
392537 |
{
|
|
Packit Service |
392537 |
int rc;
|
|
Packit Service |
392537 |
char buf[512];
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
rc = ndmbstf_first (fp, "CM ", buf, sizeof buf);
|
|
Packit Service |
392537 |
if (rc <= 0) {
|
|
Packit Service |
392537 |
return rc; /* error or not found */
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
/* CM 01 T103/10850K */
|
|
Packit Service |
392537 |
while (buf[0] == 'C' && buf[1] == 'M' && buf[2] == ' ') {
|
|
Packit Service |
392537 |
struct ndmmedia * me;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
if (n_ji_media >= NDM_MAX_MEDIA) {
|
|
Packit Service |
392537 |
goto overflow;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
me = &ji_media[n_ji_media];
|
|
Packit Service |
392537 |
if (ndmmedia_from_str (me, &buf[6])) {
|
|
Packit Service |
392537 |
goto malformed;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
n_ji_media++;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
rc = ndmbstf_getline (fp, buf, sizeof buf);
|
|
Packit Service |
392537 |
if (rc <= 0) {
|
|
Packit Service |
392537 |
break;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
continue;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
malformed:
|
|
Packit Service |
392537 |
ndmjob_log (1, "Malformed in -J%s: %s", J_index_file, buf);
|
|
Packit Service |
392537 |
continue;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
overflow:
|
|
Packit Service |
392537 |
ndmjob_log (1, "Overflow in -J%s: %s", J_index_file, buf);
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
return 0;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
#endif /* !NDMOS_OPTION_NO_CONTROL_AGENT */
|