|
Packit Service |
392537 |
/*
|
|
Packit Service |
392537 |
* Amanda, The Advanced Maryland Automatic Network Disk Archiver
|
|
Packit Service |
392537 |
* Copyright (c) 1991-1998, 2000 University of Maryland at College Park
|
|
Packit Service |
392537 |
* Copyright (c) 2007-2012 Zmanda, Inc. All Rights Reserved.
|
|
Packit Service |
392537 |
* Copyright (c) 2013-2016 Carbonite, Inc. All Rights Reserved.
|
|
Packit Service |
392537 |
* All Rights Reserved.
|
|
Packit Service |
392537 |
*
|
|
Packit Service |
392537 |
* Permission to use, copy, modify, distribute, and sell this software and its
|
|
Packit Service |
392537 |
* documentation for any purpose is hereby granted without fee, provided that
|
|
Packit Service |
392537 |
* the above copyright notice appear in all copies and that both that
|
|
Packit Service |
392537 |
* copyright notice and this permission notice appear in supporting
|
|
Packit Service |
392537 |
* documentation, and that the name of U.M. not be used in advertising or
|
|
Packit Service |
392537 |
* publicity pertaining to distribution of the software without specific,
|
|
Packit Service |
392537 |
* written prior permission. U.M. makes no representations about the
|
|
Packit Service |
392537 |
* suitability of this software for any purpose. It is provided "as is"
|
|
Packit Service |
392537 |
* without express or implied warranty.
|
|
Packit Service |
392537 |
*
|
|
Packit Service |
392537 |
* U.M. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
|
|
Packit Service |
392537 |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL U.M.
|
|
Packit Service |
392537 |
* BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
Packit Service |
392537 |
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
|
|
Packit Service |
392537 |
* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
|
Packit Service |
392537 |
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
Packit Service |
392537 |
*
|
|
Packit Service |
392537 |
* Authors: the Amanda Development Team. Its members are listed in a
|
|
Packit Service |
392537 |
* file named AUTHORS, in the root directory of this distribution.
|
|
Packit Service |
392537 |
*/
|
|
Packit Service |
392537 |
/*
|
|
Packit Service |
392537 |
* $Id$
|
|
Packit Service |
392537 |
*
|
|
Packit Service |
392537 |
* parser for amrecover interactive language
|
|
Packit Service |
392537 |
*/
|
|
Packit Service |
392537 |
%{
|
|
Packit Service |
392537 |
#include "amanda.h"
|
|
Packit Service |
392537 |
#include "amrecover.h"
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
#define DATE_ALLOC_SIZE sizeof("YYYY-MM-DD-HH-MM-SS") /* includes null */
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
void yyerror(char *s);
|
|
Packit Service |
392537 |
extern int yylex(void);
|
|
Packit Service |
392537 |
extern char * yytext;
|
|
Packit Service |
392537 |
%}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
/* DECLARATIONS */
|
|
Packit Service |
392537 |
%union {
|
|
Packit Service |
392537 |
int intval;
|
|
Packit Service |
392537 |
double floatval;
|
|
Packit Service |
392537 |
char * strval;
|
|
Packit Service |
392537 |
int subtok;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
/* literal keyword tokens */
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
%token LISTHOST LISTDISK LISTPROPERTY
|
|
Packit Service |
392537 |
%token SETHOST SETDISK SETDATE SETTAPE SETMODE SETDEVICE SETPROPERTY
|
|
Packit Service |
392537 |
%token CD CDX QUIT DHIST LS ADD ADDX EXTRACT DASH_H
|
|
Packit Service |
392537 |
%token LIST DELETE DELETEX PWD CLEAR HELP LCD LPWD MODE SMB TAR
|
|
Packit Service |
392537 |
%token APPEND PRIORITY SETTRANSLATE STORAGE
|
|
Packit Service |
392537 |
%token NL
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
/* typed tokens */
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
%token <strval> STRING
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
/* GRAMMAR */
|
|
Packit Service |
392537 |
%%
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
ucommand:
|
|
Packit Service |
392537 |
set_command
|
|
Packit Service |
392537 |
| setdate_command
|
|
Packit Service |
392537 |
| display_command
|
|
Packit Service |
392537 |
| quit_command
|
|
Packit Service |
392537 |
| add_command
|
|
Packit Service |
392537 |
| addx_command
|
|
Packit Service |
392537 |
| delete_command
|
|
Packit Service |
392537 |
| deletex_command
|
|
Packit Service |
392537 |
| local_command
|
|
Packit Service |
392537 |
| help_command
|
|
Packit Service |
392537 |
| extract_command
|
|
Packit Service |
392537 |
| invalid_command
|
|
Packit Service |
392537 |
;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
set_command:
|
|
Packit Service |
392537 |
LISTHOST NL { list_host(); }
|
|
Packit Service |
392537 |
| LISTHOST invalid_string { yyerror("Invalid argument"); }
|
|
Packit Service |
392537 |
| LISTDISK STRING NL { list_disk($2); amfree($2); }
|
|
Packit Service |
392537 |
| LISTDISK NL { list_disk(NULL); }
|
|
Packit Service |
392537 |
| LISTDISK STRING invalid_string { yyerror("Invalid argument"); amfree($2); }
|
|
Packit Service |
392537 |
| LISTPROPERTY NL { list_property(); }
|
|
Packit Service |
392537 |
| LISTPROPERTY invalid_string { yyerror("Invalid argument"); }
|
|
Packit Service |
392537 |
| SETTRANSLATE NL { set_translate(NULL); }
|
|
Packit Service |
392537 |
| SETTRANSLATE STRING invalid_string NL { yyerror("Invalid argument"); }
|
|
Packit Service |
392537 |
| SETTRANSLATE STRING NL { set_translate($2); amfree($2); }
|
|
Packit Service |
392537 |
| SETHOST STRING NL { set_host($2); amfree($2); }
|
|
Packit Service |
392537 |
| SETHOST STRING invalid_string { yyerror("Invalid argument"); amfree($2); }
|
|
Packit Service |
392537 |
| SETHOST NL { yyerror("Argument required"); }
|
|
Packit Service |
392537 |
| SETDISK STRING STRING NL { set_disk($2, $3); amfree($2); amfree($3); }
|
|
Packit Service |
392537 |
| SETDISK STRING NL { set_disk($2, NULL); amfree($2); }
|
|
Packit Service |
392537 |
| SETDISK STRING STRING invalid_string { yyerror("Invalid argument"); amfree($2); amfree($3); }
|
|
Packit Service |
392537 |
| SETDISK { yyerror("Argument required"); }
|
|
Packit Service |
392537 |
| SETTAPE STRING NL { set_tape($2); amfree($2); }
|
|
Packit Service |
392537 |
| SETTAPE NL { set_tape("default"); }
|
|
Packit Service |
392537 |
| SETTAPE STRING invalid_string { yyerror("Invalid argument"); amfree($2); }
|
|
Packit Service |
392537 |
| SETDEVICE STRING NL { set_device(NULL, $2); amfree($2); }
|
|
Packit Service |
392537 |
| SETDEVICE DASH_H STRING STRING NL { set_device($3, $4); amfree($3); amfree($4); }
|
|
Packit Service |
392537 |
| SETDEVICE NL { set_device(NULL, NULL); }
|
|
Packit Service |
392537 |
| SETDEVICE STRING invalid_string { yyerror("Invalid argument"); amfree($2); }
|
|
Packit Service |
392537 |
| SETDEVICE DASH_H STRING NL { yyerror("Invalid argument"); amfree($3); }
|
|
Packit Service |
392537 |
| SETDEVICE DASH_H STRING STRING invalid_string { yyerror("Invalid argument"); amfree($3); amfree($4); }
|
|
Packit Service |
392537 |
| SETPROPERTY STRING property_value { set_property_name($2, 0); amfree($2); }
|
|
Packit Service |
392537 |
| SETPROPERTY APPEND STRING property_value { set_property_name($3, 1); amfree($3); }
|
|
Packit Service |
392537 |
| SETPROPERTY PRIORITY STRING property_value { set_property_name($3, 0); amfree($3); }
|
|
Packit Service |
392537 |
| SETPROPERTY APPEND PRIORITY STRING property_value { set_property_name($4, 1); amfree($4); }
|
|
Packit Service |
392537 |
| SETPROPERTY NL { yyerror("Invalid argument"); }
|
|
Packit Service |
392537 |
| SETPROPERTY APPEND NL { yyerror("Invalid argument"); }
|
|
Packit Service |
392537 |
| SETPROPERTY PRIORITY NL { yyerror("Invalid argument"); }
|
|
Packit Service |
392537 |
| SETPROPERTY APPEND PRIORITY NL { yyerror("Invalid argument"); }
|
|
Packit Service |
392537 |
| CD STRING NL { cd_glob($2, 1); amfree($2); }
|
|
Packit Service |
392537 |
| CD STRING invalid_string { yyerror("Invalid argument"); }
|
|
Packit Service |
392537 |
| CD NL { yyerror("Argument required"); }
|
|
Packit Service |
392537 |
| CDX STRING NL { cd_regex($2, 1); amfree($2); }
|
|
Packit Service |
392537 |
| CDX STRING invalid_string { yyerror("Invalid argument"); amfree($2); }
|
|
Packit Service |
392537 |
| CDX NL { yyerror("Argument required"); }
|
|
Packit Service |
392537 |
| SETMODE SMB NL { set_mode(SAMBA_SMBCLIENT); }
|
|
Packit Service |
392537 |
| SETMODE TAR NL { set_mode(SAMBA_TAR); }
|
|
Packit Service |
392537 |
| SETMODE SMB invalid_string { yyerror("Invalid argument"); }
|
|
Packit Service |
392537 |
| SETMODE TAR invalid_string { yyerror("Invalid argument"); }
|
|
Packit Service |
392537 |
| SETMODE invalid_string { yyerror("Invalid argument"); }
|
|
Packit Service |
392537 |
| SETMODE NL { yyerror("Argument required"); }
|
|
Packit Service |
392537 |
| STORAGE storage_value { set_storage(); }
|
|
Packit Service |
392537 |
;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
setdate_command:
|
|
Packit Service |
392537 |
SETDATE STRING NL {
|
|
Packit Service |
392537 |
time_t now;
|
|
Packit Service |
392537 |
struct tm *t;
|
|
Packit Service |
392537 |
int y=2000, m=0, d=1, h=0, mi=0, s=0;
|
|
Packit Service |
392537 |
char *mydate = $2;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
now = time((time_t *)NULL);
|
|
Packit Service |
392537 |
t = localtime(&now;;
|
|
Packit Service |
392537 |
if (t) {
|
|
Packit Service |
392537 |
y = 1900+t->tm_year;
|
|
Packit Service |
392537 |
m = t->tm_mon+1;
|
|
Packit Service |
392537 |
d = t->tm_mday;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
if (sscanf(mydate, "---%d", &d) == 1 ||
|
|
Packit Service |
392537 |
sscanf(mydate, "--%d-%d", &m, &d) == 2 ||
|
|
Packit Service |
392537 |
sscanf(mydate, "%d-%d-%d-%d-%d-%d", &y, &m, &d, &h, &mi, &s) >= 3) {
|
|
Packit Service |
392537 |
if (y < 70) {
|
|
Packit Service |
392537 |
y += 2000;
|
|
Packit Service |
392537 |
} else if (y < 100) {
|
|
Packit Service |
392537 |
y += 1900;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
if(y < 1000 || y > 9999) {
|
|
Packit Service |
392537 |
printf("invalid year");
|
|
Packit Service |
392537 |
} else if(m < 1 || m > 12) {
|
|
Packit Service |
392537 |
printf("invalid month");
|
|
Packit Service |
392537 |
} else if(d < 1 || d > 31) {
|
|
Packit Service |
392537 |
printf("invalid day");
|
|
Packit Service |
392537 |
} else if(h < 0 || h > 24) {
|
|
Packit Service |
392537 |
printf("invalid hour");
|
|
Packit Service |
392537 |
} else if(mi < 0 || mi > 59) {
|
|
Packit Service |
392537 |
printf("invalid minute");
|
|
Packit Service |
392537 |
} else if(s < 0 || s > 59) {
|
|
Packit Service |
392537 |
printf("invalid second");
|
|
Packit Service |
392537 |
} else {
|
|
Packit Service |
392537 |
char result[DATE_ALLOC_SIZE];
|
|
Packit Service |
392537 |
if (h == 0 && mi == 0 && s == 0)
|
|
Packit Service |
392537 |
g_snprintf(result, DATE_ALLOC_SIZE, "%04d-%02d-%02d", y, m, d);
|
|
Packit Service |
392537 |
else
|
|
Packit Service |
392537 |
g_snprintf(result, DATE_ALLOC_SIZE, "%04d-%02d-%02d-%02d-%02d-%02d", y, m, d, h, mi, s);
|
|
Packit Service |
392537 |
set_date(result);
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
} else {
|
|
Packit Service |
392537 |
printf("Invalid date: %s\n", mydate);
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
| SETDATE NL { yyerror("Argument required"); }
|
|
Packit Service |
392537 |
| SETDATE STRING invalid_string { yyerror("Invalid argument"); }
|
|
Packit Service |
392537 |
;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
display_command:
|
|
Packit Service |
392537 |
DHIST NL { list_disk_history(); }
|
|
Packit Service |
392537 |
| DHIST invalid_string { yyerror("Invalid argument"); }
|
|
Packit Service |
392537 |
| LS NL { list_directory(); }
|
|
Packit Service |
392537 |
| LS invalid_string { yyerror("Invalid argument"); }
|
|
Packit Service |
392537 |
| LIST STRING NL { display_extract_list($2); amfree($2); }
|
|
Packit Service |
392537 |
| LIST NL { display_extract_list(NULL); }
|
|
Packit Service |
392537 |
| LIST STRING invalid_string { yyerror("Invalid argument"); }
|
|
Packit Service |
392537 |
| PWD NL { show_directory(); }
|
|
Packit Service |
392537 |
| PWD invalid_string { yyerror("Invalid argument"); }
|
|
Packit Service |
392537 |
| CLEAR NL { clear_extract_list(); }
|
|
Packit Service |
392537 |
| CLEAR invalid_string { yyerror("Invalid argument"); }
|
|
Packit Service |
392537 |
| MODE NL { show_mode (); }
|
|
Packit Service |
392537 |
| MODE invalid_string { yyerror("Invalid argument"); }
|
|
Packit Service |
392537 |
;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
quit_command:
|
|
Packit Service |
392537 |
QUIT NL { quit(); }
|
|
Packit Service |
392537 |
| QUIT invalid_string { yyerror("Invalid argument"); }
|
|
Packit Service |
392537 |
;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
add_command:
|
|
Packit Service |
392537 |
ADD add_path NL
|
|
Packit Service |
392537 |
;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
add_path:
|
|
Packit Service |
392537 |
add_path STRING { add_glob($2); amfree($2); }
|
|
Packit Service |
392537 |
| STRING { add_glob($1); amfree($1); }
|
|
Packit Service |
392537 |
;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
addx_command:
|
|
Packit Service |
392537 |
ADDX addx_path NL
|
|
Packit Service |
392537 |
;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
addx_path:
|
|
Packit Service |
392537 |
addx_path STRING { add_regex($2); amfree($2); }
|
|
Packit Service |
392537 |
| STRING { add_regex($1); amfree($1); }
|
|
Packit Service |
392537 |
;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
delete_command:
|
|
Packit Service |
392537 |
DELETE delete_path NL
|
|
Packit Service |
392537 |
;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
delete_path:
|
|
Packit Service |
392537 |
delete_path STRING { delete_glob($2); amfree($2); }
|
|
Packit Service |
392537 |
| STRING { delete_glob($1); amfree($1); }
|
|
Packit Service |
392537 |
;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
deletex_command:
|
|
Packit Service |
392537 |
DELETEX deletex_path NL
|
|
Packit Service |
392537 |
;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
deletex_path:
|
|
Packit Service |
392537 |
deletex_path STRING { delete_regex($2); amfree($2); }
|
|
Packit Service |
392537 |
| STRING { delete_regex($1); amfree($1); }
|
|
Packit Service |
392537 |
;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
local_command:
|
|
Packit Service |
392537 |
LPWD NL { char * buf= g_get_current_dir(); puts(buf); free(buf); }
|
|
Packit Service |
392537 |
| LPWD invalid_string { yyerror("Invalid argument"); }
|
|
Packit Service |
392537 |
| LCD STRING NL {
|
|
Packit Service |
392537 |
local_cd($2);
|
|
Packit Service |
392537 |
amfree($2);
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
| LCD STRING invalid_string { yyerror("Invalid argument"); }
|
|
Packit Service |
392537 |
| LCD NL { yyerror("Argument required"); }
|
|
Packit Service |
392537 |
;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
help_command:
|
|
Packit Service |
392537 |
HELP NL { help_list(); }
|
|
Packit Service |
392537 |
| HELP invalid_string { yyerror("Invalid argument"); }
|
|
Packit Service |
392537 |
;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
extract_command:
|
|
Packit Service |
392537 |
EXTRACT NL { extract_files(); }
|
|
Packit Service |
392537 |
| EXTRACT invalid_string { yyerror("Invalid argument"); }
|
|
Packit Service |
392537 |
;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
invalid_command:
|
|
Packit Service |
392537 |
STRING bogus_string {
|
|
Packit Service |
392537 |
char * errstr = g_strjoin(NULL, "Invalid command: ", $1, NULL);
|
|
Packit Service |
392537 |
yyerror(errstr);
|
|
Packit Service |
392537 |
amfree(errstr);
|
|
Packit Service |
392537 |
YYERROR;
|
|
Packit Service |
392537 |
} /* Quiets compiler warnings about unused label */
|
|
Packit Service |
392537 |
;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
property_value:
|
|
Packit Service |
392537 |
STRING property_value { add_property_value($1); amfree( $1); }
|
|
Packit Service |
392537 |
| NL { ; }
|
|
Packit Service |
392537 |
;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
storage_value:
|
|
Packit Service |
392537 |
STRING storage_value { add_storage_value($1); amfree( $1); }
|
|
Packit Service |
392537 |
| NL { ; }
|
|
Packit Service |
392537 |
;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
invalid_string:
|
|
Packit Service |
392537 |
STRING bogus_string { amfree($1); }
|
|
Packit Service |
392537 |
;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
bogus_string:
|
|
Packit Service |
392537 |
STRING bogus_string { amfree($1); }
|
|
Packit Service |
392537 |
| NL { ; }
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
/* ADDITIONAL C CODE */
|
|
Packit Service |
392537 |
%%
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
void
|
|
Packit Service |
392537 |
yyerror(
|
|
Packit Service |
392537 |
char * s)
|
|
Packit Service |
392537 |
{
|
|
Packit Service |
392537 |
g_printf("%s\n", s);
|
|
Packit Service |
392537 |
}
|