* file named AUTHORS, in the root directory of this distribution.
*/
/*
- * $Id: rundump.c,v 1.23.2.3.6.1.2.1 2005/09/20 21:31:52 jrjackson Exp $
+ * $Id: rundump.c,v 1.33 2006/07/25 18:27:56 martinea Exp $
*
* runs DUMP program as root
+ *
+ * argv[0] is the rundump program name
+ * argv[1] is the config name or NOCONFIG
+ * argv[2] will be argv[0] of the DUMP program
+ * ...
*/
#include "amanda.h"
#include "version.h"
-int main P((int argc, char **argv));
+int main(int argc, char **argv);
#if defined(VDUMP) || defined(XFSDUMP)
+# undef USE_RUNDUMP
# define USE_RUNDUMP
#endif
# endif
#endif
-int main(argc, argv)
-int argc;
-char **argv;
+int
+main(
+ int argc,
+ char ** argv)
{
#ifndef ERRMSG
char *dump_program;
set_pname("rundump");
- dbopen();
- dbprintf(("%s: version %s\n", argv[0], version()));
+ /* Don't die when child closes pipe */
+ signal(SIGPIPE, SIG_IGN);
+
+ dbopen(DBG_SUBDIR_CLIENT);
+ if (argc < 3) {
+ error("%s: Need at least 3 arguments\n", debug_prefix(NULL));
+ /*NOTREACHED*/
+ }
+
+ dbprintf(("%s: version %s\n", debug_prefix(NULL), version()));
#ifdef ERRMSG /* { */
if(client_uid == (uid_t) -1) {
error("error [cannot find user %s in passwd file]\n", CLIENT_LOGIN);
+ /*NOTREACHED*/
}
#ifdef FORCE_USERID
if (getuid() != client_uid) {
error("error [must be invoked by %s]\n", CLIENT_LOGIN);
+ /*NOTREACHED*/
}
if (geteuid() != 0) {
error("error [must be setuid root]\n");
+ /*NOTREACHED*/
}
#endif /* FORCE_USERID */
setuid(0);
#endif
+ /* skip argv[0] */
+ argc--;
+ argv++;
+
+ dbprintf(("config: %s\n", argv[0]));
+ if (strcmp(argv[0], "NOCONFIG") != 0)
+ dbrename(argv[0], DBG_SUBDIR_CLIENT);
+ argc--;
+ argv++;
+
#ifdef XFSDUMP
if (strcmp(argv[0], "xfsdump") == 0)
execve(dump_program, argv, safe_env());
e = strerror(errno);
- dbprintf(("execve of %s failed (%s)\n", dump_program, e));
+ dbprintf(("failed (%s)\n", e));
dbclose();
fprintf(stderr, "rundump: could not exec %s: %s\n", dump_program, e);