Imported Upstream version 3.3.3
[debian/amanda] / client-src / noop.c
1 /*
2  * Amanda, The Advanced Maryland Automatic Network Disk Archiver
3  * Copyright (c) 1991-1999 University of Maryland at College Park
4  * Copyright (c) 2007-2012 Zmanda, Inc.  All Rights Reserved.
5  * All Rights Reserved.
6  *
7  * Permission to use, copy, modify, distribute, and sell this software and its
8  * documentation for any purpose is hereby granted without fee, provided that
9  * the above copyright notice appear in all copies and that both that
10  * copyright notice and this permission notice appear in supporting
11  * documentation, and that the name of U.M. not be used in advertising or
12  * publicity pertaining to distribution of the software without specific,
13  * written prior permission.  U.M. makes no representations about the
14  * suitability of this software for any purpose.  It is provided "as is"
15  * without express or implied warranty.
16  *
17  * U.M. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL U.M.
19  * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
20  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
21  * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
22  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
23  *
24  * Authors: the Amanda Development Team.  Its members are listed in a
25  * file named AUTHORS, in the root directory of this distribution.
26  */
27
28 /*
29  * $Id: noop.c,v 1.5 2006/06/01 14:54:39 martinea Exp $
30  *
31  * send back features.  This was pulled out to it's own program for
32  * consistancy and because it's a hell of a lot easier to code in
33  * a fork()-less environment.
34  */
35
36 #include "amanda.h"
37 #include "amfeatures.h"
38 #include "util.h"
39
40 int main(int argc, char **argv);
41
42 int
43 main(
44     int         argc,
45     char **     argv)
46 {
47     char ch;
48     am_feature_t *our_features = NULL;
49     char *our_feature_string = NULL;
50     char *options;
51     ssize_t n;
52
53     (void)argc; /* Quiet unused parameter warning */
54     (void)argv; /* Quiet unused parameter warning */
55
56     if (argc > 1 && argv && argv[1] && g_str_equal(argv[1], "--version")) {
57         printf("noop-%s\n", VERSION);
58         return (0);
59     }
60
61     /*
62      * Configure program for internationalization:
63      *   1) Only set the message locale for now.
64      *   2) Set textdomain for all amanda related programs to "amanda"
65      *      We don't want to be forced to support dozens of message catalogs.
66      */  
67     setlocale(LC_MESSAGES, "C");
68     textdomain("amanda"); 
69
70     /* Don't die when child closes pipe */
71     signal(SIGPIPE, SIG_IGN);
72
73     safe_fd(-1, 0);
74     openbsd_fd_inform();
75
76     check_running_as(RUNNING_AS_CLIENT_LOGIN);
77
78     do {
79         /* soak up any stdin */
80         n = read(0, &ch, 1);
81     } while ((n > 0) || ((n < 0) && ((errno == EINTR) || (errno == EAGAIN))));
82     our_features = am_init_feature_set();
83     our_feature_string = am_feature_to_string(our_features);
84     options = vstralloc("OPTIONS features=",
85                         our_feature_string,
86                         ";\n",
87                         NULL);
88     amfree(our_feature_string);
89     am_release_feature_set(our_features);
90     our_features = NULL;
91     if (full_write(1, options, strlen(options)) < strlen(options)) {
92         error(_("error sending noop response: %s"), strerror(errno));
93         /*NOTREACHED*/
94     }
95     amfree(options);
96     close(0);
97     close(1);
98     close(2);
99     return (0); /* exit */
100 }