Imported Upstream version 3.3.3
[debian/amanda] / server-src / amadmin.c
index b7dea49e2f1dced774070377e81cc9c87a894059..f51b17e7f8cc5b9eb88559e641c542039c2d6a96 100644 (file)
@@ -1,6 +1,7 @@
 /*
  * Amanda, The Advanced Maryland Automatic Network Disk Archiver
  * Copyright (c) 1991-1998 University of Maryland at College Park
+ * Copyright (c) 2007-2012 Zmanda, Inc.  All Rights Reserved.
  * All Rights Reserved.
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
@@ -93,6 +94,7 @@ static gboolean print_default = 1;
 static gboolean print_source = 0;
 static int opt_days = -1;
 static char *opt_sort = NULL;
+static gboolean exact_match = FALSE;
 static gboolean opt_long = 0;
 static gboolean opt_outdated = 0;
 
@@ -156,6 +158,7 @@ static struct option long_options[] = {
     {"print-source"  , 0, NULL,  3},
     {"days"          , 1, NULL,  4},
     {"sort"          , 1, NULL,  5},
+    {"exact-match"   , 0, NULL,  6},
     {NULL, 0, NULL, 0}
 };
 
@@ -212,6 +215,8 @@ main(
                break;
        case 5: opt_sort = g_strdup(optarg);
                break;
+       case 6: exact_match = TRUE;
+               break;
        case 'l': opt_long = TRUE;
                break;
        case 'd': opt_outdated = TRUE;
@@ -291,7 +296,7 @@ usage(void)
 {
     int i;
 
-    g_fprintf(stderr, _("\nUsage: %s [--version] [--no-default] [--print-source] [-o configoption]*\n               <conf> <command> {<args>} ...\n"),
+    g_fprintf(stderr, _("\nUsage: %s [--version] [--exact-match] [--no-default] [--print-source] [-o configoption]*\n               <conf> <command> {<args>} ...\n"),
            get_pname());
     g_fprintf(stderr, _("    Valid <command>s are:\n"));
     for (i = 0; i < NCMDS; i++)
@@ -369,7 +374,7 @@ diskloop(
        usage();
     }
 
-    errstr = match_disklist(&diskq, argc-3, argv+3);
+    errstr = match_disklist(&diskq, exact_match, argc-3, argv+3);
     if (errstr) {
        g_printf("%s", errstr);
        amfree(errstr);
@@ -1197,7 +1202,8 @@ find(
        }
     }
     start_argc=4;
-    errstr = match_disklist(&diskq, argc-(start_argc-1), argv+(start_argc-1));
+    errstr = match_disklist(&diskq, exact_match, argc-(start_argc-1),
+                                                argv+(start_argc-1));
 
     /* check all log file exists */
     output_find_log = find_log();
@@ -1214,8 +1220,8 @@ find(
        disk_t *dp;
 
        amfree(errstr);
-       errstr = match_disklist(&diskq, argc-(start_argc-1),
-                                       argv+(start_argc-1));
+       errstr = match_disklist(&diskq, exact_match, argc-(start_argc-1),
+                                                    argv+(start_argc-1));
        if (errstr) {
            g_printf("%s", errstr);
            amfree(errstr);
@@ -1250,7 +1256,8 @@ static GSList *
 get_file_list(
     int argc,
     char **argv,
-    int allow_empty)
+    int allow_empty,
+    gboolean exact_match)
 {
     GSList * file_list = NULL;
     GSList * dumplist;
@@ -1258,6 +1265,7 @@ get_file_list(
 
     flags = CMDLINE_PARSE_DATESTAMP;
     if (allow_empty) flags |= CMDLINE_EMPTY_TO_WILDCARD;
+    if (exact_match) flags |= CMDLINE_EXACT_MATCH;
     dumplist = cmdline_parse_dumpspecs(argc, argv, flags);
 
     file_list = cmdline_match_holding(dumplist);
@@ -1508,7 +1516,7 @@ holding(
                    _("size (kB)"), _("lv"), _("outd"), _("dump specification"));
             }
 
-            file_list = get_file_list(argc, argv, 1);
+            file_list = get_file_list(argc, argv, 1, exact_match);
             for (li = file_list; li != NULL; li = li->next) {
                 char *dumpstr;
                int is_outdated;
@@ -1543,7 +1551,7 @@ holding(
         case HOLDING_DELETE:
             argc -= 4; argv += 4;
 
-            file_list = get_file_list(argc, argv, 0);
+            file_list = get_file_list(argc, argv, 0, exact_match);
             for (li = file_list; li != NULL; li = li->next) {
                 g_fprintf(stderr, _("Deleting '%s'\n"), (char *)li->data);
                 /* remove it from the catalog */