*/
#include "amanda.h"
#include "version.h"
+#include "util.h"
#ifdef HAVE_GETPGRP
#ifdef GETPGRP_VOID
static void term_kill_soft(int sig);
static void term_kill_hard(int sig);
-int main(
- int argc,
- char **argv)
+int
+main(
+ int argc,
+ char ** argv)
{
int ch;
+ char *exitstr;
amwait_t status;
+ /*
+ * 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);
safe_cd();
dbopen(DBG_SUBDIR_CLIENT);
if (argc < 2) {
- error("%s: Need at least 2 arguments\n", debug_prefix(NULL));
+ error("Need at least 2 arguments\n");
/*NOTREACHED*/
}
- dbprintf(("%s: version %s\n", debug_prefix(NULL), version()));
- dbprintf(("config: %s\n", argv[1]));
+ dbprintf(_("version %s\n"), version());
+ dbprintf(_("config: %s\n"), argv[1]);
if (strcmp(argv[1], "NOCONFIG") != 0)
dbrename(argv[1], DBG_SUBDIR_CLIENT);
- if(client_uid == (uid_t) -1) {
- error("error [cannot find user %s in passwd file]", CLIENT_LOGIN);
- /*NOTREACHED*/
- }
-
-#ifdef FORCE_USERID
- if (getuid() != client_uid) {
- error("error [must be invoked by %s]", CLIENT_LOGIN);
- /*NOTREACHED*/
- }
- if (geteuid() != 0) {
- error("error [must be setuid root]");
+#ifdef WANT_SETUID_CLIENT
+ check_running_as(RUNNING_AS_CLIENT_LOGIN | RUNNING_AS_UID_ONLY);
+ if (!become_root()) {
+ error(_("error [%s could not become root (is the setuid bit set?)]\n"), get_pname());
/*NOTREACHED*/
}
-#endif /* FORCE_USERID */
-
-#if !defined (DONT_SUID_ROOT)
- setuid(0);
+#else
+ check_running_as(RUNNING_AS_CLIENT_LOGIN);
#endif
if (AM_GETPGRP() != getpid()) {
- error("error [must be the process group leader]");
+ error(_("error [must be the process group leader]"));
/*NOTREACHED*/
}
- /* Consume any extranious input */
signal(SIGTERM, term_kill_soft);
+ /* Consume any extranious input */
do {
ch = getchar();
/* wait until EOF */
if (wait(&status) != -1)
break;
if (errno != EINTR) {
- error("error [wait() failed: %s]", strerror(errno));
+ error(_("error [wait() failed: %s]"), strerror(errno));
/*NOTREACHED*/
}
}
+ exitstr = str_exit_status("child", status);
+ dbprintf("%s\n", exitstr);
+ amfree(exitstr);
/*@ignore@*/
- dbprintf(("child process exited with status %d\n", WEXITSTATUS(status)));
-
- return WEXITSTATUS(status);
+ return WIFEXITED(status)?WEXITSTATUS(status):1;
/*@end@*/
}
* First, try to kill the dump process nicely. If it ignores us
* for three seconds, hit it harder.
*/
- dbprintf(("sending SIGTERM to process group %ld\n", (long) dumppid));
+ dbprintf(_("sending SIGTERM to process group %ld\n"), (long) dumppid);
killerr = kill(-dumppid, SIGTERM);
if (killerr == -1) {
- dbprintf(("kill failed: %s\n", strerror(errno)));
+ dbprintf(_("kill failed: %s\n"), strerror(errno));
}
}
(void)sig; /* Quiet unused parameter warning */
- dbprintf(("it won\'t die with SIGTERM, but SIGKILL should do\n"));
- dbprintf(("do\'t expect any further output, this will be suicide\n"));
+ dbprintf(_("It won\'t die with SIGTERM, but SIGKILL should do.\n"));
+ dbprintf(_("Don't expect any further output, this will be suicide.\n"));
killerr = kill(-dumppid, SIGKILL);
/* should never reach this point, but so what? */
if (killerr == -1) {
- dbprintf(("kill failed: %s\n", strerror(errno)));
- dbprintf(("waiting until child terminates\n"));
+ dbprintf(_("kill failed: %s\n"), strerror(errno));
+ dbprintf(_("waiting until child terminates\n"));
}
}