]> git.sur5r.net Git - bacula/bacula/commitdiff
- Fix lib/fnmatch.c so that it does proper testing before folding.
authorKern Sibbald <kern@sibbald.com>
Mon, 2 May 2005 13:23:27 +0000 (13:23 +0000)
committerKern Sibbald <kern@sibbald.com>
Mon, 2 May 2005 13:23:27 +0000 (13:23 +0000)
- More documentation -- at tls and ansi labels chapters.
- Fix fileset_convert.pl to handle empty Exclude statements.
- Turn regex back off in Win32

git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@1976 91ce42f0-d328-0410-95d8-f526ca767f89

bacula/ReleaseNotes
bacula/examples/conf/fileset_convert.pl
bacula/src/findlib/find.c
bacula/src/lib/fnmatch.c
bacula/src/version.h

index 088ae3edf1a684392cc8d85b63667344ee653e34..cb07214f91a4a9610ede5324244e950cfc1f05f5 100644 (file)
@@ -87,7 +87,6 @@ New Directives:
   Implemented in Director Pool resource and in SD Device resource.
   If it is specified in the SD Device resource, it will take
   precedence over the value passed from the Director to the SD.
-  IBM is not yet implemented.
 - Check Labels = yes | no
   Implemented in the SD Device resource. If you intend to read
   ANSI or IBM labels, this *must* be set. Even if the volume
@@ -146,6 +145,8 @@ Items to note!!!
 - With Python 2.3, there are a few compiler warnings.
 - You must either create a new catalog database or upgrade your
   old database (the PostgreSQL upgrade scripts not yet tested).
+- You must add --with-openssl to the configure command line if
+  you want TLS communications encryption support.
 
 Other Items:
 - 2 new scripts, dvd-writepart and dvd-freespace, in the scripts directory,
@@ -155,84 +156,5 @@ Other Items:
 - Part files support: File volumes can now be splitted in multiple
   files, called "parts".
 
-NOTE THE FOLLOWING IS NOW OUT OF DATE!!!!
-- Python scripting support:
-  A Python script will be called at particular points or conditions
-  in Bacula called Events. The currently defined Events are called:
-
-  StartJob, EndJob, NewVolume
-
-  Where StartJob is called before the RunBeforeJob, EndJob is called 
-  after RunAfterJob, and NewVolume, is called before all other 
-  "methods" of obtaining a new Volume name, when one is needed.
-
-  The Python script of the same name as the Event name (but with a .py) 
-  is called from the Scripts Directory (a directive defined in the
-  Director resource).  Note, both the Filename, and the name of
-  the function in the file must correspond to the Event name.
-
-  Once the Python script gets control, it can have access to Bacula
-  variables by doing:
-
-     import bacula
-
-  The script is called with one argument, typically called jcr. This
-  argument *must* be used to access each bacula function. The
-  format of the call is slightly different for reading Bacula
-  variable and for writing bacula variables. See below.
-
-  Bacula variables can be read with:
-
-     jcr.get("Variable-name")
-
-    where jcr is the argument passed to the function, and Variable-name
-    is on of the following:
-
-     JobId, Client, Pool, Storage, Catalog, MediaType, NumVols, DirName,
-       Level, Type, Job, JobName, JobStatus
-
-   Bacula varibles can be set using Python keyword arguments:
-
-      jcr.set(VolumeName="xyz")
-
-    The two currently implemented writable "variables" are:
-
-    VolumeName and JobReport
-
-   It is possible to submit a Bacula run command with the following:
-
-     jcr.run("run kernsave client=Matou storage=File")
-
-   this function returns the JobId of the job that was started. If
-   there is an error, the return value is zero.
-
-   Example:
-
-== File EndJob.py ===
-import bacula
-
-def EndJob(jcr):
-    jobid = jcr.get("JobId")
-    client = jcr.get("Client") 
-    jcr.set(JobReport="EndJob output: JobId=%d Client=%s.\n" % (jobid, client))
-    if (jobid < 5) :
-       startid = jcr.run("run kernsave")
-       print "Python started jobid=", startid
-
-    return 1
-====
-
-== File NewVolume.py ===
-import bacula
-
-def NewVolume(jcr):
-    jobid = jcr.get("JobId")
-    print "JobId=", jobid
-    client = jcr.get("Client") 
-    print "Client=" + client
-    numvol = jcr.get("NumVols");
-    print "NumVols=", numvol
-    jcr.set(JobReport="New Volume set for Job.\n") 
-    jcr.set(VolumeName="TestA-001")
-    return 1
-====
+- For the details of the Python scripting support, please see the new
+  Python Scripting chapter in the manual.
\ No newline at end of file
index f39a00d2ba764274e088a683527929d2fcb86670..87950d34f1240a82896c0c08622bd67c76698caf 100755 (executable)
@@ -23,9 +23,12 @@ $in =~ s/Include\s*=\s*((?:\w+=\w+\s+)*){\s*((?:.*?\n)+?)\s*}/
   "Include { " . 
   ( $1 ? options($1) : '' ) . "\n" .
   file_lines($2) .
-  "\n  }\n" /eg;
+  "\n  }" /eg;
+
+$in =~ s/Exclude\s*=\s*{\s*}/
+  "Exclude { }"/eg;
 
 $in =~ s/Exclude\s*=\s*{\s*((?:.*?\n)+?)\s*}/
-  "Exclude {\n" . file_lines($1) . "\n  }\n"/eg;
+  "Exclude {\n" . file_lines($1) . "\n  }"/eg;
 
 print $in;
index 4195306341db3fc26aaabedeeeac96ec6f9ef136..3bb0d755a702ebe69f05c2639480852d615430e1 100644 (file)
@@ -198,7 +198,7 @@ static bool accept_file(FF_PKT *ff)
             return true;              /* accept file */
          }
       }
-//#ifndef WIN32
+#ifndef WIN32
       if (S_ISDIR(ff->statp.st_mode)) {
          for (k=0; k<fo->regexdir.size(); k++) {
             const int nmatch = 30;
@@ -232,7 +232,7 @@ static bool accept_file(FF_PKT *ff)
             return true;              /* accept file */
          }
       }
-//#endif
+#endif
       /*
        * If we have an empty Options clause with exclude, then
        *  exclude the file
index 8d08ced09689f218594ae5086da87007d1f5c608..ef1fab559c5e23d90b410dc0ee1eb769359ce641 100644 (file)
 #include "bacula.h"
 #include "fnmatch.h"
 
-
-/* Comment out all this code if we are using the GNU C Library, and are not
-   actually compiling the library itself.  This code is part of the GNU C
-   Library, but also included in many other GNU distributions. Compiling
-   and linking in this code is a waste when using the GNU C library
-   (especially if it is a shared library).  Rather than having every GNU
-   program understand `configure --with-gnu-libc' and omit the object files,
-   it is simpler to just do this in the source for each such file.  */
-
-#if defined _LIBC || !defined __GNU_LIBRARY__
-
-
-# if defined STDC_HEADERS || !defined isascii
-#  define ISASCII(c) 1
-# else
-#  define ISASCII(c) isascii(c)
-# endif
-
-#ifndef ISUPPER
-# define ISUPPER(c) (ISASCII (c) && isupper (c))
-#endif
-
-
 # ifndef errno
 extern int errno;
 # endif
 
 /* Match STRING against the filename pattern PATTERN, returning zero if
-   it matches, nonzero if not. */
+   it matches, nonzero if not.  */
 int
 fnmatch (const char *pattern, const char *string, int flags)
 {
@@ -53,163 +30,163 @@ fnmatch (const char *pattern, const char *string, int flags)
   register char c;
 
 /* Note that this evaluates C many times.  */
-# define FOLD(c) ((flags & FNM_CASEFOLD) && ISUPPER (c) ? tolower (c) : (c))
+# define FOLD(c) ((flags & FNM_CASEFOLD) && B_ISUPPER (c) ? tolower (c) : (c))
 
   while ((c = *p++) != '\0')
     {
       c = FOLD (c);
 
       switch (c)
-       {
+        {
         case '?':
           if (*n == '\0')
-           return FNM_NOMATCH;
+            return FNM_NOMATCH;
           else if ((flags & FNM_FILE_NAME) && *n == '/')
-           return FNM_NOMATCH;
+            return FNM_NOMATCH;
           else if ((flags & FNM_PERIOD) && *n == '.' &&
                    (n == string || ((flags & FNM_FILE_NAME) && n[-1] == '/')))
-           return FNM_NOMATCH;
-         break;
+            return FNM_NOMATCH;
+          break;
 
         case '\\':
-         if (!(flags & FNM_NOESCAPE))
-           {
-             c = *p++;
+          if (!(flags & FNM_NOESCAPE))
+            {
+              c = *p++;
               if (c == '\0')
                 /* Trailing \ loses.  */
-               return FNM_NOMATCH;
-             c = FOLD (c);
-           }
-         if (FOLD (*n) != c)
-           return FNM_NOMATCH;
-         break;
+                return FNM_NOMATCH;
+              c = FOLD (c);
+            }
+          if (FOLD (*n) != c)
+            return FNM_NOMATCH;
+          break;
 
         case '*':
           if ((flags & FNM_PERIOD) && *n == '.' &&
               (n == string || ((flags & FNM_FILE_NAME) && n[-1] == '/')))
-           return FNM_NOMATCH;
+            return FNM_NOMATCH;
 
           for (c = *p++; c == '?' || c == '*'; c = *p++)
-           {
+            {
               if ((flags & FNM_FILE_NAME) && *n == '/')
-               /* A slash does not match a wildcard under FNM_FILE_NAME.  */
-               return FNM_NOMATCH;
+                /* A slash does not match a wildcard under FNM_FILE_NAME.  */
+                return FNM_NOMATCH;
               else if (c == '?')
-               {
-                 /* A ? needs to match one character.  */
+                {
+                  /* A ? needs to match one character.  */
                   if (*n == '\0')
                     /* There isn't another character; no match.  */
-                   return FNM_NOMATCH;
-                 else
-                   /* One character of the string is consumed in matching
+                    return FNM_NOMATCH;
+                  else
+                    /* One character of the string is consumed in matching
                        this ? wildcard, so *??? won't match if there are
-                      less than three characters.  */
-                   ++n;
-               }
-           }
+                       less than three characters.  */
+                    ++n;
+                }
+            }
 
           if (c == '\0')
-           return 0;
+            return 0;
 
-         {
+          {
             char c1 = (!(flags & FNM_NOESCAPE) && c == '\\') ? *p : c;
-           c1 = FOLD (c1);
+            c1 = FOLD (c1);
             for (--p; *n != '\0'; ++n)
               if ((c == '[' || FOLD ((unsigned char)*n) == c1) &&
-                 fnmatch (p, n, flags & ~FNM_PERIOD) == 0)
-               return 0;
-           return FNM_NOMATCH;
-         }
+                  fnmatch (p, n, flags & ~FNM_PERIOD) == 0)
+                return 0;
+            return FNM_NOMATCH;
+          }
 
         case '[':
-         {
-           /* Nonzero if the sense of the character class is inverted.  */
-           register int nnot;
+          {
+            /* Nonzero if the sense of the character class is inverted.  */
+            register int nnot;
 
             if (*n == '\0')
-             return FNM_NOMATCH;
+              return FNM_NOMATCH;
 
             if ((flags & FNM_PERIOD) && *n == '.' &&
                 (n == string || ((flags & FNM_FILE_NAME) && n[-1] == '/')))
-             return FNM_NOMATCH;
+              return FNM_NOMATCH;
 
             nnot = (*p == '!' || *p == '^');
-           if (nnot)
-             ++p;
+            if (nnot)
+              ++p;
 
-           c = *p++;
-           for (;;)
-             {
-               register char cstart = c, cend = c;
+            c = *p++;
+            for (;;)
+              {
+                register char cstart = c, cend = c;
 
                 if (!(flags & FNM_NOESCAPE) && c == '\\')
-                 {
+                  {
                     if (*p == '\0')
-                     return FNM_NOMATCH;
-                   cstart = cend = *p++;
-                 }
+                      return FNM_NOMATCH;
+                    cstart = cend = *p++;
+                  }
 
-               cstart = cend = FOLD (cstart);
+                cstart = cend = FOLD (cstart);
 
                 if (c == '\0')
-                 /* [ (unterminated) loses.  */
-                 return FNM_NOMATCH;
+                  /* [ (unterminated) loses.  */
+                  return FNM_NOMATCH;
 
-               c = *p++;
-               c = FOLD (c);
+                c = *p++;
+                c = FOLD (c);
 
                 if ((flags & FNM_FILE_NAME) && c == '/')
-                 /* [/] can never match.  */
-                 return FNM_NOMATCH;
+                  /* [/] can never match.  */
+                  return FNM_NOMATCH;
 
                 if (c == '-' && *p != ']')
-                 {
-                   cend = *p++;
+                  {
+                    cend = *p++;
                     if (!(flags & FNM_NOESCAPE) && cend == '\\')
-                     cend = *p++;
+                      cend = *p++;
                     if (cend == '\0')
-                     return FNM_NOMATCH;
-                   cend = FOLD (cend);
+                      return FNM_NOMATCH;
+                    cend = FOLD (cend);
 
-                   c = *p++;
-                 }
+                    c = *p++;
+                  }
 
-               if (FOLD (*n) >= cstart && FOLD (*n) <= cend)
-                 goto matched;
+                if (FOLD (*n) >= cstart && FOLD (*n) <= cend)
+                  goto matched;
 
                 if (c == ']')
-                 break;
-             }
-           if (!nnot)
-             return FNM_NOMATCH;
-           break;
-
-         matched:;
-           /* Skip the rest of the [...] that already matched.  */
+                  break;
+              }
+            if (!nnot)
+              return FNM_NOMATCH;
+            break;
+
+          matched:;
+            /* Skip the rest of the [...] that already matched.  */
             while (c != ']')
-             {
+              {
                 if (c == '\0')
-                 /* [... (unterminated) loses.  */
-                 return FNM_NOMATCH;
+                  /* [... (unterminated) loses.  */
+                  return FNM_NOMATCH;
 
-               c = *p++;
+                c = *p++;
                 if (!(flags & FNM_NOESCAPE) && c == '\\')
-                 {
+                  {
                     if (*p == '\0')
-                     return FNM_NOMATCH;
-                   /* XXX 1003.2d11 is unclear if this is right.  */
-                   ++p;
-                 }
-             }
-           if (nnot)
-             return FNM_NOMATCH;
-         }
-         break;
-
-       default:
-         if (c != FOLD ((unsigned char)*n))
-           return FNM_NOMATCH;
-       }
+                      return FNM_NOMATCH;
+                    /* XXX 1003.2d11 is unclear if this is right.  */
+                    ++p;
+                  }
+              }
+            if (nnot)
+              return FNM_NOMATCH;
+          }
+          break;
+
+        default:
+          if (c != FOLD (*n))
+            return FNM_NOMATCH;
+        }
 
       ++n;
     }
@@ -225,5 +202,3 @@ fnmatch (const char *pattern, const char *string, int flags)
 
 # undef FOLD
 }
-
-#endif /* _LIBC or not __GNU_LIBRARY__.  */
index 37904b89d2d0a87c32eafd7b8e2800b882dac954..394e38b48660c46709939c8a607f7221d150a89e 100644 (file)
@@ -1,8 +1,8 @@
 /* */
 #undef  VERSION
 #define VERSION "1.37.16"
-#define BDATE   "01 May 2005"
-#define LSMDATE "01May05"
+#define BDATE   "02 May 2005"
+#define LSMDATE "02May05"
 
 /* Debug flags */
 #undef  DEBUG