X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=client-src%2Fkillpgrp.c;fp=client-src%2Fkillpgrp.c;h=d7472943dcc961b8437a7ce1faa7bebc0fb3c9b7;hb=94a044f90357edefa6f4ae9f0b1d5885b0e34aee;hp=e2b983d7b89cb2bcfa784fb4af315ba854fc080d;hpb=d3b2175e084f88c8736ad7073eacbf4670147aec;p=debian%2Famanda diff --git a/client-src/killpgrp.c b/client-src/killpgrp.c index e2b983d..d747294 100644 --- a/client-src/killpgrp.c +++ b/client-src/killpgrp.c @@ -35,6 +35,7 @@ */ #include "amanda.h" #include "version.h" +#include "util.h" #ifdef HAVE_GETPGRP #ifdef GETPGRP_VOID @@ -51,13 +52,24 @@ int main(int argc, char **argv); 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(); @@ -65,42 +77,32 @@ int main( dbopen(DBG_SUBDIR_CLIENT); if (argc < 2) { - error("%s: Need at least 2 arguments\n", debug_prefix_time(NULL)); + error("Need at least 2 arguments\n"); /*NOTREACHED*/ } - dbprintf(("%s: version %s\n", debug_prefix_time(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 */ @@ -112,15 +114,16 @@ int main( 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@*/ } @@ -139,10 +142,10 @@ static void term_kill_soft( * 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)); } } @@ -154,12 +157,12 @@ static void term_kill_hard( (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")); } }