* file named AUTHORS, in the root directory of this distribution.
*/
/*
- * $Id: amrecover.c,v 1.7.2.2 2006/12/12 14:56:38 martinea Exp $
+ * $Id: amrecover.c,v 1.7 2006/07/25 18:27:57 martinea Exp $
*
* an interactive program for recovering backed-up files
*/
#include "amanda.h"
-#include "version.h"
#include "stream.h"
#include "amfeatures.h"
#include "amrecover.h"
#include "getfsent.h"
#include "dgram.h"
#include "util.h"
+#include "conffile.h"
extern int process_line(char *line);
int guess_disk(char *cwd, size_t cwd_len, char **dn_guess, char **mpt_guess);
void sigint_handler(int signum);
int main(int argc, char **argv);
-#define USAGE "Usage: amoldrecover [[-C] <config>] [-s <index-server>] [-t <tape-server>] [-d <tape-device>]\n"
+#define USAGE _("Usage: amoldrecover [[-C] <config>] [-s <index-server>] [-t <tape-server>] [-d <tape-device>]\n")
char *config = NULL;
char *server_name = NULL;
fputc('\n', stderr);
}
if(save_errno != 0) {
- fprintf(stderr, "%s: Error reading line from server: %s\n",
+ g_fprintf(stderr, _("%s: Error reading line from server: %s\n"),
get_pname(),
strerror(save_errno));
} else {
- fprintf(stderr, "%s: Unexpected end of file, check amindexd*debug on server %s\n",
+ g_fprintf(stderr, _("%s: Unexpected end of file, check amindexd*debug on server %s\n"),
get_pname(),
server_name);
}
/*NOTREACHED*/
}
cwd_length = strlen(cwd);
- dbprintf(("guess_disk: %zu: \"%s\"\n", cwd_length, cwd));
+ dbprintf(_("guess_disk: %zu: \"%s\"\n"), cwd_length, cwd);
if (open_fstab() == 0) {
return -1;
while (get_fstab_nextentry(&fsent))
{
current_length = fsent.mntdir ? strlen(fsent.mntdir) : (size_t)0;
- dbprintf(("guess_disk: %zu: %zu: \"%s\": \"%s\"\n",
+ dbprintf(_("guess_disk: %zu: %zu: \"%s\": \"%s\"\n"),
longest_match,
current_length,
- fsent.mntdir ? fsent.mntdir : "(mntdir null)",
- fsent.fsname ? fsent.fsname : "(fsname null)"));
+ fsent.mntdir ? fsent.mntdir : _("(mntdir null)"),
+ fsent.fsname ? fsent.fsname : _("(fsname null)"));
if ((current_length > longest_match)
&& (current_length <= cwd_length)
&& (strncmp(fsent.mntdir, cwd, current_length) == 0))
fsname = newstralloc(fsname,fsent.fsname+strlen(DEV_PREFIX));
}
local_disk = is_local_fstype(&fsent);
- dbprintf(("guess_disk: local_disk = %d, fsname = \"%s\"\n",
+ dbprintf(_("guess_disk: local_disk = %d, fsname = \"%s\"\n"),
local_disk,
- fsname));
+ fsname);
}
}
close_fstab();
/* have mount point now */
/* disk name may be specified by mount point (logical name) or
device name, have to determine */
- printf("Trying disk %s ...\n", *mpt_guess);
+ g_printf(_("Trying disk %s ...\n"), *mpt_guess);
disk_try = stralloc2("DISK ", *mpt_guess); /* try logical name */
if (exchange(disk_try) == -1)
exit(1);
amfree(fsname);
return 1;
}
- printf("Trying disk %s ...\n", fsname);
+ g_printf(_("Trying disk %s ...\n"), fsname);
disk_try = stralloc2("DISK ", fsname); /* try device name */
if (exchange(disk_try) == -1)
exit(1);
char *line = NULL;
struct tm *tm;
+ /*
+ * Configure program for internationalization:
+ * 1) Only set the message locale for now.
+ * 2) Set textdomain for all amanda related programs to "amanda"
+ * We don't want to be forced to support dozens of message catalogs.
+ */
+ setlocale(LC_MESSAGES, "C");
+ textdomain("amanda");
+
safe_fd(-1, 0);
set_pname("amoldrecover");
dbopen(DBG_SUBDIR_CLIENT);
-#ifndef IGNORE_UID_CHECK
- if (geteuid() != 0) {
- erroutput_type |= ERR_SYSLOG;
- error("amrecover must be run by root");
- /*NOTREACHED*/
- }
-#endif
-
localhost = alloc(MAX_HOSTNAME_LENGTH+1);
if (gethostname(localhost, MAX_HOSTNAME_LENGTH) != 0) {
- error("cannot determine local host name\n");
+ error(_("cannot determine local host name\n"));
/*NOTREACHED*/
}
localhost[MAX_HOSTNAME_LENGTH] = '\0';
dbrename(config, DBG_SUBDIR_CLIENT);
+ check_running_as(RUNNING_AS_ROOT);
+
amfree(server_name);
server_name = getenv("AMANDA_SERVER");
if(!server_name) server_name = DEFAULT_SERVER;
if(!tape_server_name) tape_server_name = DEFAULT_TAPE_SERVER;
tape_server_name = stralloc(tape_server_name);
+ config_init(CONFIG_INIT_CLIENT, NULL);
+
+ if (config_errors(NULL) >= CFGERR_WARNINGS) {
+ config_print_errors();
+ if (config_errors(NULL) >= CFGERR_ERRORS) {
+ g_critical(_("errors processing config file"));
+ }
+ }
+
if (argc > 1 && argv[1][0] != '-')
{
/*
case 'U':
case '?':
- (void)printf(USAGE);
+ (void)g_printf(USAGE);
return 0;
}
}
if (optind != argc)
{
- (void)fprintf(stderr, USAGE);
+ (void)g_fprintf(stderr, USAGE);
exit(1);
}
sigemptyset(&act.sa_mask);
act.sa_flags = 0;
if (sigaction(SIGINT, &act, &oact) != 0) {
- error("error setting signal handler: %s", strerror(errno));
+ error(_("error setting signal handler: %s"), strerror(errno));
/*NOTREACHED*/
}
service_name = stralloc2("amandaidx", SERVICE_SUFFIX);
- printf("AMRECOVER Version %s. Contacting server on %s ...\n",
- version(), server_name);
+ g_printf(_("AMRECOVER Version %s. Contacting server on %s ...\n"),
+ VERSION, server_name);
if ((sp = getservbyname(service_name, "tcp")) == NULL) {
- error("%s/tcp unknown protocol", service_name);
+ error(_("%s/tcp unknown protocol"), service_name);
/*NOTREACHED*/
}
amfree(service_name);
&my_port,
0);
if (server_socket < 0) {
- error("cannot connect to %s: %s", server_name, strerror(errno));
+ error(_("cannot connect to %s: %s"), server_name, strerror(errno));
/*NOTREACHED*/
}
if (my_port >= IPPORT_RESERVED) {
aclose(server_socket);
- error("did not get a reserved port: %d", my_port);
+ error(_("did not get a reserved port: %d"), my_port);
/*NOTREACHED*/
}
-#if 0
- /*
- * We may need root privilege again later for a reserved port to
- * the tape server, so we will drop down now but might have to
- * come back later.
- */
- setegid(getgid());
- seteuid(getuid());
-#endif
-
/* get server's banner */
if (grab_reply(1) == -1) {
aclose(server_socket);
if (tm)
strftime(dump_date, sizeof(dump_date), "%Y-%m-%d", tm);
else
- error("BAD DATE");
+ error(_("BAD DATE"));
- printf("Setting restore date to today (%s)\n", dump_date);
+ g_printf(_("Setting restore date to today (%s)\n"), dump_date);
line = stralloc2("DATE ", dump_date);
if (converse(line) == -1) {
aclose(server_socket);
{
case 1:
/* okay, got a guess. Set disk accordingly */
- printf("$CWD '%s' is on disk '%s' mounted at '%s'.\n",
+ g_printf(_("$CWD '%s' is on disk '%s' mounted at '%s'.\n"),
cwd, dn_guess, mpt_guess);
set_disk(dn_guess, mpt_guess);
set_directory(cwd);
if (server_happy() && strcmp(cwd, mpt_guess) != 0)
- printf("WARNING: not on root of selected filesystem, check man-page!\n");
+ g_printf(_("WARNING: not on root of selected filesystem, check man-page!\n"));
amfree(dn_guess);
amfree(mpt_guess);
break;
case 0:
- printf("$CWD '%s' is on a network mounted disk\n",
+ g_printf(_("$CWD '%s' is on a network mounted disk\n"),
cwd);
- printf("so you must 'sethost' to the server\n");
+ g_printf(_("so you must 'sethost' to the server\n"));
/* fake an unhappy server */
server_line[0] = '5';
break;
case 2:
case -1:
default:
- printf("Use the setdisk command to choose dump disk to recover\n");
+ g_printf(_("Use the setdisk command to choose dump disk to recover\n"));
/* fake an unhappy server */
server_line[0] = '5';
break;
struct passwd *pwptr;
if((pwptr = getpwuid(getuid())) == NULL) {
- error("can't get login name for my uid %ld", (long)getuid());
+ error(_("can't get login name for my uid %ld"), (long)getuid());
/*NOTREACHED*/
}
return stralloc2("SECURITY USER ", pwptr->pw_name);