summaryrefslogtreecommitdiff
path: root/iceauth/iceauth.c
diff options
context:
space:
mode:
Diffstat (limited to 'iceauth/iceauth.c')
-rw-r--r--iceauth/iceauth.c153
1 files changed, 153 insertions, 0 deletions
diff --git a/iceauth/iceauth.c b/iceauth/iceauth.c
new file mode 100644
index 0000000..8730a82
--- /dev/null
+++ b/iceauth/iceauth.c
@@ -0,0 +1,153 @@
+/*
+ * xauth - manipulate authorization file
+ *
+ *
+Copyright 1989, 1998 The Open Group
+
+Permission to use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided that
+the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation.
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of The Open Group shall not be
+used in advertising or otherwise to promote the sale, use or other dealings
+in this Software without prior written authorization from The Open Group.
+ * *
+ * Original Author of "xauth" : Jim Fulton, MIT X Consortium
+ * Modified into "iceauth" : Ralph Mor, X Consortium
+ */
+
+#include "iceauth.h"
+
+
+/*
+ * global data
+ */
+const char *ProgramName; /* argv[0], set at top of main() */
+int verbose = -1; /* print certain messages */
+Bool ignore_locks = False; /* for error recovery */
+Bool break_locks = False; /* for error recovery */
+
+/*
+ * local data
+ */
+
+static char *authfilename = NULL; /* filename of cookie file */
+static char *defcmds[] = { "source", "-", NULL }; /* default command */
+static int ndefcmds = 2;
+static const char *defsource = "(stdin)";
+
+
+/*
+ * utility routines
+ */
+static void usage (void)
+{
+ static const char prefixmsg[] =
+"\n"
+"where options include:\n"
+" -f authfilename name of authority file to use\n"
+" -v turn on extra messages\n"
+" -q turn off extra messages\n"
+" -i ignore locks on authority file\n"
+" -b break locks on authority file\n"
+"\n"
+"and commands have the following syntax:\n";
+ static const char suffixmsg[] =
+"A dash may be used with the \"merge\" and \"source\" to read from the\n"
+"standard input. Commands beginning with \"n\" use numeric format.\n";
+
+ fprintf (stderr, "usage: %s [-options ...] [command arg ...]\n",
+ ProgramName);
+ fprintf (stderr, "%s\n", prefixmsg);
+ print_help (stderr, " "); /* match prefix indentation */
+ fprintf (stderr, "\n%s\n", suffixmsg);
+ exit (1);
+}
+
+
+/*
+ * The main routine - parses command line and calls action procedures
+ */
+int
+main (int argc, char *argv[])
+{
+ int i;
+ const char *sourcename = defsource;
+ char **arglist = defcmds;
+ int nargs = ndefcmds;
+ int status;
+
+ ProgramName = argv[0];
+
+ for (i = 1; i < argc; i++) {
+ char *arg = argv[i];
+
+ if (arg[0] == '-') {
+ char *flag;
+
+ for (flag = (arg + 1); *flag; flag++) {
+ switch (*flag) {
+ case 'f': /* -f authfilename */
+ if (++i >= argc) usage ();
+ authfilename = argv[i];
+ continue;
+ case 'v': /* -v */
+ verbose = 1;
+ continue;
+ case 'q': /* -q */
+ verbose = 0;
+ continue;
+ case 'b': /* -b */
+ break_locks = True;
+ continue;
+ case 'i': /* -i */
+ ignore_locks = True;
+ continue;
+ default:
+ usage ();
+ }
+ }
+ } else {
+ sourcename = "(argv)";
+ nargs = argc - i;
+ arglist = argv + i;
+ if (verbose == -1) verbose = 0;
+ break;
+ }
+ }
+
+ if (verbose == -1) { /* set default, don't junk stdout */
+ verbose = (isatty(fileno(stdout)) != 0);
+ }
+
+ if (!authfilename) {
+ authfilename = IceAuthFileName (); /* static name, do not free */
+ if (!authfilename) {
+ fprintf (stderr,
+ "%s: unable to generate an authority file name\n",
+ ProgramName);
+ exit (1);
+ }
+ }
+ if (auth_initialize (authfilename) != 0) {
+ /* error message printed in auth_initialize */
+ exit (1);
+ }
+
+ status = process_command (sourcename, 1, nargs, arglist);
+
+ (void) auth_finalize ();
+ exit ((status != 0) ? 1 : 0);
+}