On Tue, Feb 18, 2003 at 12:16:16PM -0500, Richard Morse wrote:
> Hi! I realize that it's bad form to follow-up to yourself, but nobody
> else seems to be, so...
> On Friday, February 14, 2003, at 11:26 AM, Richard Morse wrote:
>
> >Hi! I have a 2.4.4b1 client, compiled on Cygwin. I'd like to use the
> >"include list" feature, so I upgraded my server from 2.4.2p2 to 2.4.3.
> > I have another cygwin client that works, without using the include
> >list feature.
> >
> >When I run amcheck, I get back the error "[include must be at least 3
> >character long: ]" and "[No incude for /cygdrive/c]" from the host
> >which I'm trying to use the include list on. I did let this host run
> >one night as backup, and it generated 10 bytes of data for the tape,
> >which is a problem, as this was a new disk, and there's more than 10
> >bytes of data to be backed up.
> >
>
> As it turns out, the two error messages are coming from different
> sources.
>
> The first one ("[include must be at least 3 character long: ]" is
> because there is [was] a blank line at the end of the include file. I
> usually put one extra newline at the end of a file so that I can easily
> add things to the end, and for aesthetic reasons. Although this isn't
> really a bug, blank lines should probably be skipped when reading the
> file.
>
> The second error is more worrisome to me. In my .amanda-gtar-includes
> file, I had the line:
> ./Documents and Settings/jad47
>
> Apparently, add_include only iterates over the directories at the root
> of the drive (which makes sense), but therefore, it won't find anything
> that matches this include: it never checks any deeper into the
> hierarchy than one level, so when it iterates over "Document and
> Settings", it doesn't match, because "Documents and Settings" doesn't
> match the regex "Documents and Settings/jad47".
I sent a patch for that on amanda-users (6 Jan 2003) but nobody has
confirmed that it worked so it was never commited to cvs. The patch
is included if you want to try it.
> The thing is, I don't want to back up all the data in "Documents and
> Settings", just the stuff in the user folder. However, I want to back
> up other stuff that's at the root level (ie, at /cygdrive/c), so I
> don't really want to make my disklist entry be "/cygdrive/c/docume~1",
> and have to put another entry for "/cygdrive/c".
>
> Is there any solution? (Well, I know that there probably isn't in this
> version, but is it possible to make the add_include handle directories
> several levels deep?)
>
> Also, is it possible to pass both include _and_ exclude lists to tar?
> So I could tell it to back up "./Documents and Settings", but exclude
> "./Documents and Settings/Administrator"? (Which, actually, would be
> useful just in general so I can exclude browser caches...)
That should works.
Jean-Louis
--
Jean-Louis Martineau email: [EMAIL PROTECTED]
Departement IRO, Universite de Montreal
C.P. 6128, Succ. CENTRE-VILLE Tel: (514) 343-6111 ext. 3529
Montreal, Canada, H3C 3J7 Fax: (514) 343-5834
--- /u/martinea/amcore/amanda-2.4.3/client-src/client_util.c 2003-01-02
20:05:56.000000000 -0500
+++ client-src/client_util.c 2003-01-05 17:31:36.000000000 -0500
@@ -193,28 +193,32 @@
return 0;
}
else {
- char *glob;
- char *regex;
- DIR *d;
- struct dirent *entry;
-
- glob = ainc+2;
- regex = glob_to_regex(glob);
- if((d = opendir(device)) == NULL) {
- dbprintf(("%s: Can't open disk '%s']\n",
- debug_prefix(NULL), device));
- if(verbose)
- printf("ERROR [Can't open disk '%s']\n", device);
- return 0;
+ char *incname = ainc+2;
+ if(strchr(incname, '/')) {
+ fprintf(file_include, "./%s\n", incname);
}
else {
- while((entry = readdir(d)) != NULL) {
- if(is_dot_or_dotdot(entry->d_name)) {
- continue;
- }
- if(match(regex, entry->d_name)) {
- fprintf(file_include, "./%s\n", entry->d_name);
- nb_exp++;
+ char *regex;
+ DIR *d;
+ struct dirent *entry;
+
+ regex = glob_to_regex(incname);
+ if((d = opendir(device)) == NULL) {
+ dbprintf(("%s: Can't open disk '%s']\n",
+ debug_prefix(NULL), device));
+ if(verbose)
+ printf("ERROR [Can't open disk '%s']\n", device);
+ return 0;
+ }
+ else {
+ while((entry = readdir(d)) != NULL) {
+ if(is_dot_or_dotdot(entry->d_name)) {
+ continue;
+ }
+ if(match(regex, entry->d_name)) {
+ fprintf(file_include, "./%s\n", entry->d_name);
+ nb_exp++;
+ }
}
}
}