]> git.sur5r.net Git - bacula/bacula/blob - bacula/patches/2.4.2-estimate-cmd.patch
ff98b5447e5aae6c7a485d13cbb351293745eff9
[bacula/bacula] / bacula / patches / 2.4.2-estimate-cmd.patch
1
2  This patch fixes the seg faults that occur in the Director if an incorrect
3  estimate command is given -- in particular a level specification without
4  the value.  This fixes bug #1140
5  Apply this patch to Bacula 2.4.2 (and possibly earlier versions) with:
6
7  cd <bacula-source>
8  patch -p0 <2.4.2-estimate-cmd.patch
9  ./configure <your-options>
10  make
11  ...
12  make install
13
14
15   
16 Index: src/dird/ua_cmds.c
17 ===================================================================
18 --- src/dird/ua_cmds.c  (revision 7469)
19 +++ src/dird/ua_cmds.c  (working copy)
20 @@ -1079,17 +1079,31 @@
21            strcasecmp(ua->argk[i], NT_("fd")) == 0) {
22           if (ua->argv[i]) {
23              client = GetClientResWithName(ua->argv[i]);
24 +            if (!client) {
25 +               ua->error_msg(_("Client \"%s\" not found.\n"), ua->argv[i]);
26 +               return 1;
27 +            }
28              continue;
29 +         } else {
30 +            ua->error_msg(_("Client name missing.\n"));
31 +            return 1;
32           }
33        }
34        if (strcasecmp(ua->argk[i], NT_("job")) == 0) {
35           if (ua->argv[i]) {
36              job = GetJobResWithName(ua->argv[i]);
37 -            if (job && !acl_access_ok(ua, Job_ACL, job->name())) {
38 +            if (!job) {
39 +               ua->error_msg(_("Job \"%s\" not found.\n"), ua->argv[i]);
40 +               return 1;
41 +            }
42 +            if (!acl_access_ok(ua, Job_ACL, job->name())) {
43                 ua->error_msg(_("No authorization for Job \"%s\"\n"), job->name());
44                 return 1;
45              }
46              continue;
47 +         } else {
48 +            ua->error_msg(_("Job name missing.\n"));
49 +            return 1;
50           }
51        }
52        if (strcasecmp(ua->argk[i], NT_("fileset")) == 0) {
53 @@ -1100,15 +1114,25 @@
54                 return 1;
55              }
56              continue;
57 +         } else {
58 +            ua->error_msg(_("Fileset name missing.\n"));
59 +            return 1;
60           }
61 +
62        }
63        if (strcasecmp(ua->argk[i], NT_("listing")) == 0) {
64           listing = 1;
65           continue;
66        }
67        if (strcasecmp(ua->argk[i], NT_("level")) == 0) {
68 -         if (!get_level_from_name(ua->jcr, ua->argv[i])) {
69 -            ua->error_msg(_("Level %s not valid.\n"), ua->argv[i]);
70 +         if (ua->argv[i]) {
71 +            if (!get_level_from_name(ua->jcr, ua->argv[i])) {
72 +               ua->error_msg(_("Level \"%s\" not valid.\n"), ua->argv[i]);
73 +            }
74 +            continue;
75 +         } else {
76 +           ua->error_msg(_("Level value missing.\n"));
77 +           return 1;
78           }
79           continue;
80        }