diff options
Diffstat (limited to 'plugins/check_disk.c')
| -rw-r--r-- | plugins/check_disk.c | 108 |
1 files changed, 31 insertions, 77 deletions
diff --git a/plugins/check_disk.c b/plugins/check_disk.c index 8a824c1f..f0a679dd 100644 --- a/plugins/check_disk.c +++ b/plugins/check_disk.c | |||
| @@ -37,10 +37,6 @@ const char *revision = "$Revision$"; | |||
| 37 | const char *copyright = "1999-2006"; | 37 | const char *copyright = "1999-2006"; |
| 38 | const char *email = "nagiosplug-devel@lists.sourceforge.net"; | 38 | const char *email = "nagiosplug-devel@lists.sourceforge.net"; |
| 39 | 39 | ||
| 40 | /* | ||
| 41 | * Additional inode code by Jorgen Lundman <lundman@lundman.net> | ||
| 42 | */ | ||
| 43 | |||
| 44 | 40 | ||
| 45 | #include "common.h" | 41 | #include "common.h" |
| 46 | #if HAVE_INTTYPES_H | 42 | #if HAVE_INTTYPES_H |
| @@ -50,12 +46,14 @@ const char *email = "nagiosplug-devel@lists.sourceforge.net"; | |||
| 50 | #include "popen.h" | 46 | #include "popen.h" |
| 51 | #include "utils.h" | 47 | #include "utils.h" |
| 52 | #include <stdarg.h> | 48 | #include <stdarg.h> |
| 53 | #include "../lib/fsusage.h" | 49 | #include "fsusage.h" |
| 54 | #include "../lib/mountlist.h" | 50 | #include "mountlist.h" |
| 55 | #if HAVE_LIMITS_H | 51 | #if HAVE_LIMITS_H |
| 56 | # include <limits.h> | 52 | # include <limits.h> |
| 57 | #endif | 53 | #endif |
| 58 | 54 | ||
| 55 | #include "utils_disk.h" | ||
| 56 | |||
| 59 | /* If nonzero, show inode information. */ | 57 | /* If nonzero, show inode information. */ |
| 60 | static int inode_format; | 58 | static int inode_format; |
| 61 | 59 | ||
| @@ -77,8 +75,7 @@ static int show_local_fs = 0; | |||
| 77 | /* static int require_sync = 0; */ | 75 | /* static int require_sync = 0; */ |
| 78 | 76 | ||
| 79 | /* A filesystem type to display. */ | 77 | /* A filesystem type to display. */ |
| 80 | 78 | struct parameter_list | |
| 81 | struct name_list | ||
| 82 | { | 79 | { |
| 83 | char *name; | 80 | char *name; |
| 84 | int found; | 81 | int found; |
| @@ -89,7 +86,7 @@ struct name_list | |||
| 89 | double c_dfp; | 86 | double c_dfp; |
| 90 | double w_idfp; | 87 | double w_idfp; |
| 91 | double c_idfp; | 88 | double c_idfp; |
| 92 | struct name_list *name_next; | 89 | struct parameter_list *name_next; |
| 93 | }; | 90 | }; |
| 94 | 91 | ||
| 95 | /* Linked list of filesystem types to display. | 92 | /* Linked list of filesystem types to display. |
| @@ -103,7 +100,7 @@ struct name_list | |||
| 103 | Some filesystem types: | 100 | Some filesystem types: |
| 104 | 4.2 4.3 ufs nfs swap ignore io vm efs dbg */ | 101 | 4.2 4.3 ufs nfs swap ignore io vm efs dbg */ |
| 105 | 102 | ||
| 106 | /* static struct name_list *fs_select_list; */ | 103 | /* static struct parameter_list *fs_select_list; */ |
| 107 | 104 | ||
| 108 | /* Linked list of filesystem types to omit. | 105 | /* Linked list of filesystem types to omit. |
| 109 | If the list is empty, don't exclude any types. */ | 106 | If the list is empty, don't exclude any types. */ |
| @@ -112,9 +109,7 @@ static struct name_list *fs_exclude_list; | |||
| 112 | 109 | ||
| 113 | static struct name_list *dp_exclude_list; | 110 | static struct name_list *dp_exclude_list; |
| 114 | 111 | ||
| 115 | static struct name_list *path_select_list; | 112 | static struct parameter_list *path_select_list; |
| 116 | |||
| 117 | static struct name_list *dev_select_list; | ||
| 118 | 113 | ||
| 119 | /* Linked list of mounted filesystems. */ | 114 | /* Linked list of mounted filesystems. */ |
| 120 | static struct mount_entry *mount_list; | 115 | static struct mount_entry *mount_list; |
| @@ -132,11 +127,14 @@ enum | |||
| 132 | #pragma alloca | 127 | #pragma alloca |
| 133 | #endif | 128 | #endif |
| 134 | 129 | ||
| 130 | /* Linked list of mounted filesystems. */ | ||
| 131 | static struct mount_entry *mount_list; | ||
| 132 | |||
| 135 | int process_arguments (int, char **); | 133 | int process_arguments (int, char **); |
| 136 | void print_path (const char *mypath); | 134 | void print_path (const char *mypath); |
| 137 | int validate_arguments (uintmax_t, uintmax_t, double, double, double, double, char *); | 135 | int validate_arguments (uintmax_t, uintmax_t, double, double, double, double, char *); |
| 138 | int check_disk (double usp, uintmax_t free_disk, double uisp); | 136 | int check_disk (double usp, uintmax_t free_disk, double uisp); |
| 139 | int walk_name_list (struct name_list *list, const char *name); | 137 | int walk_parameter_list (struct parameter_list *list, const char *name); |
| 140 | void print_help (void); | 138 | void print_help (void); |
| 141 | void print_usage (void); | 139 | void print_usage (void); |
| 142 | 140 | ||
| @@ -154,9 +152,6 @@ int verbose = 0; | |||
| 154 | int erronly = FALSE; | 152 | int erronly = FALSE; |
| 155 | int display_mntp = FALSE; | 153 | int display_mntp = FALSE; |
| 156 | 154 | ||
| 157 | /* Linked list of mounted filesystems. */ | ||
| 158 | static struct mount_entry *mount_list; | ||
| 159 | |||
| 160 | 155 | ||
| 161 | 156 | ||
| 162 | int | 157 | int |
| @@ -174,7 +169,7 @@ main (int argc, char **argv) | |||
| 174 | 169 | ||
| 175 | struct mount_entry *me; | 170 | struct mount_entry *me; |
| 176 | struct fs_usage fsp; | 171 | struct fs_usage fsp; |
| 177 | struct name_list *temp_list; | 172 | struct parameter_list *temp_list; |
| 178 | 173 | ||
| 179 | output = strdup (" - free space:"); | 174 | output = strdup (" - free space:"); |
| 180 | details = strdup (""); | 175 | details = strdup (""); |
| @@ -199,8 +194,8 @@ main (int argc, char **argv) | |||
| 199 | */ | 194 | */ |
| 200 | if(path_select_list){ | 195 | if(path_select_list){ |
| 201 | for (me = mount_list; me; me = me->me_next) { | 196 | for (me = mount_list; me; me = me->me_next) { |
| 202 | walk_name_list(path_select_list, me->me_mountdir); | 197 | walk_parameter_list(path_select_list, me->me_mountdir); |
| 203 | walk_name_list(path_select_list, me->me_devname); | 198 | walk_parameter_list(path_select_list, me->me_devname); |
| 204 | } | 199 | } |
| 205 | /* now pretend we never saw anything, but keep found_len. | 200 | /* now pretend we never saw anything, but keep found_len. |
| 206 | * thus future searches will only match the best match */ | 201 | * thus future searches will only match the best match */ |
| @@ -214,12 +209,12 @@ main (int argc, char **argv) | |||
| 214 | /* if there's a list of paths to select, the current mount | 209 | /* if there's a list of paths to select, the current mount |
| 215 | * entry matches in path or device name, get fs usage */ | 210 | * entry matches in path or device name, get fs usage */ |
| 216 | if (path_select_list && | 211 | if (path_select_list && |
| 217 | (walk_name_list (path_select_list, me->me_mountdir) || | 212 | (walk_parameter_list (path_select_list, me->me_mountdir) || |
| 218 | walk_name_list (path_select_list, me->me_devname) ) ) { | 213 | walk_parameter_list (path_select_list, me->me_devname) ) ) { |
| 219 | get_fs_usage (me->me_mountdir, me->me_devname, &fsp); | 214 | get_fs_usage (me->me_mountdir, me->me_devname, &fsp); |
| 220 | /* else if there's a list of paths/devices to select (but | 215 | /* else if there's a list of paths/devices to select (but |
| 221 | * we didn't match above) skip to the next mount entry */ | 216 | * we didn't match above) skip to the next mount entry */ |
| 222 | } else if (dev_select_list || path_select_list) { | 217 | } else if (path_select_list) { |
| 223 | continue; | 218 | continue; |
| 224 | /* skip remote filesystems if we're not interested in them */ | 219 | /* skip remote filesystems if we're not interested in them */ |
| 225 | } else if (me->me_remote && show_local_fs) { | 220 | } else if (me->me_remote && show_local_fs) { |
| @@ -228,12 +223,12 @@ main (int argc, char **argv) | |||
| 228 | } else if (me->me_dummy && !show_all_fs) { | 223 | } else if (me->me_dummy && !show_all_fs) { |
| 229 | continue; | 224 | continue; |
| 230 | /* skip excluded fstypes */ | 225 | /* skip excluded fstypes */ |
| 231 | } else if (fs_exclude_list && walk_name_list (fs_exclude_list, me->me_type)) { | 226 | } else if (fs_exclude_list && np_find_name (fs_exclude_list, me->me_type)) { |
| 232 | continue; | 227 | continue; |
| 233 | /* skip excluded fs's */ | 228 | /* skip excluded fs's */ |
| 234 | } else if (dp_exclude_list && | 229 | } else if (dp_exclude_list && |
| 235 | (walk_name_list (dp_exclude_list, me->me_devname) || | 230 | (np_find_name (dp_exclude_list, me->me_devname) || |
| 236 | walk_name_list (dp_exclude_list, me->me_mountdir))) { | 231 | np_find_name (dp_exclude_list, me->me_mountdir))) { |
| 237 | continue; | 232 | continue; |
| 238 | /* otherwise, get fs usage */ | 233 | /* otherwise, get fs usage */ |
| 239 | } else { | 234 | } else { |
| @@ -312,11 +307,9 @@ int | |||
| 312 | process_arguments (int argc, char **argv) | 307 | process_arguments (int argc, char **argv) |
| 313 | { | 308 | { |
| 314 | int c; | 309 | int c; |
| 315 | struct name_list *se; | 310 | struct parameter_list *se; |
| 316 | struct name_list **pathtail = &path_select_list; | 311 | struct parameter_list **pathtail = &path_select_list; |
| 317 | struct name_list **fstail = &fs_exclude_list; | 312 | struct parameter_list *temp_list; |
| 318 | struct name_list **dptail = &dp_exclude_list; | ||
| 319 | struct name_list *temp_list; | ||
| 320 | int result = OK; | 313 | int result = OK; |
| 321 | struct stat *stat_buf; | 314 | struct stat *stat_buf; |
| 322 | 315 | ||
| @@ -351,13 +344,7 @@ process_arguments (int argc, char **argv) | |||
| 351 | if (argc < 2) | 344 | if (argc < 2) |
| 352 | return ERROR; | 345 | return ERROR; |
| 353 | 346 | ||
| 354 | se = (struct name_list *) malloc (sizeof (struct name_list)); | 347 | np_add_name(&fs_exclude_list, "iso9660"); |
| 355 | se->name = strdup ("iso9660"); | ||
| 356 | se->name_next = NULL; | ||
| 357 | se->found = 0; | ||
| 358 | se->found_len = 0; | ||
| 359 | *fstail = se; | ||
| 360 | fstail = &se->name_next; | ||
| 361 | 348 | ||
| 362 | for (c = 1; c < argc; c++) | 349 | for (c = 1; c < argc; c++) |
| 363 | if (strcmp ("-to", argv[c]) == 0) | 350 | if (strcmp ("-to", argv[c]) == 0) |
| @@ -468,7 +455,7 @@ process_arguments (int argc, char **argv) | |||
| 468 | show_local_fs = 1; | 455 | show_local_fs = 1; |
| 469 | break; | 456 | break; |
| 470 | case 'p': /* select path */ | 457 | case 'p': /* select path */ |
| 471 | se = (struct name_list *) malloc (sizeof (struct name_list)); | 458 | se = (struct parameter_list *) malloc (sizeof (struct parameter_list)); |
| 472 | se->name = optarg; | 459 | se->name = optarg; |
| 473 | se->name_next = NULL; | 460 | se->name_next = NULL; |
| 474 | se->w_df = w_df; | 461 | se->w_df = w_df; |
| @@ -483,43 +470,10 @@ process_arguments (int argc, char **argv) | |||
| 483 | pathtail = &se->name_next; | 470 | pathtail = &se->name_next; |
| 484 | break; | 471 | break; |
| 485 | case 'x': /* exclude path or partition */ | 472 | case 'x': /* exclude path or partition */ |
| 486 | se = (struct name_list *) malloc (sizeof (struct name_list)); | 473 | np_add_name(&dp_exclude_list, optarg); |
| 487 | se->name = optarg; | ||
| 488 | se->name_next = NULL; | ||
| 489 | |||
| 490 | /* If you don't clear the w_fd etc values here, they | ||
| 491 | * get processed when you walk the list and assigned | ||
| 492 | * to the global w_df! | ||
| 493 | */ | ||
| 494 | se->w_df = 0; | ||
| 495 | se->c_df = 0; | ||
| 496 | se->w_dfp = 0; | ||
| 497 | se->c_dfp = 0; | ||
| 498 | se->w_idfp = 0; | ||
| 499 | se->c_idfp = 0; | ||
| 500 | se->found = 0; | ||
| 501 | se->found_len = 0; | ||
| 502 | *dptail = se; | ||
| 503 | dptail = &se->name_next; | ||
| 504 | break; | 474 | break; |
| 505 | case 'X': /* exclude file system type */ | 475 | case 'X': /* exclude file system type */ |
| 506 | se = (struct name_list *) malloc (sizeof (struct name_list)); | 476 | np_add_name(&fs_exclude_list, optarg); |
| 507 | se->name = optarg; | ||
| 508 | se->name_next = NULL; | ||
| 509 | /* If you don't clear the w_fd etc values here, they | ||
| 510 | * get processed when you walk the list and assigned | ||
| 511 | * to the global w_df! | ||
| 512 | */ | ||
| 513 | se->w_df = 0; | ||
| 514 | se->c_df = 0; | ||
| 515 | se->w_dfp = 0; | ||
| 516 | se->c_dfp = 0; | ||
| 517 | se->w_idfp = 0; | ||
| 518 | se->c_idfp = 0; | ||
| 519 | se->found = 0; | ||
| 520 | se->found_len = 0; | ||
| 521 | *fstail = se; | ||
| 522 | fstail = &se->name_next; | ||
| 523 | break; | 477 | break; |
| 524 | case 'v': /* verbose */ | 478 | case 'v': /* verbose */ |
| 525 | verbose++; | 479 | verbose++; |
| @@ -561,7 +515,7 @@ process_arguments (int argc, char **argv) | |||
| 561 | c_dfp = (100.0 - atof (argv[c++])); | 515 | c_dfp = (100.0 - atof (argv[c++])); |
| 562 | 516 | ||
| 563 | if (argc > c && path == NULL) { | 517 | if (argc > c && path == NULL) { |
| 564 | se = (struct name_list *) malloc (sizeof (struct name_list)); | 518 | se = (struct parameter_list *) malloc (sizeof (struct parameter_list)); |
| 565 | se->name = strdup (argv[c++]); | 519 | se->name = strdup (argv[c++]); |
| 566 | se->name_next = NULL; | 520 | se->name_next = NULL; |
| 567 | se->w_df = w_df; | 521 | se->w_df = w_df; |
| @@ -683,7 +637,7 @@ check_disk (double usp, uintmax_t free_disk, double uisp) | |||
| 683 | 637 | ||
| 684 | 638 | ||
| 685 | int | 639 | int |
| 686 | walk_name_list (struct name_list *list, const char *name) | 640 | walk_parameter_list (struct parameter_list *list, const char *name) |
| 687 | { | 641 | { |
| 688 | int name_len; | 642 | int name_len; |
| 689 | name_len = strlen(name); | 643 | name_len = strlen(name); |
| @@ -695,7 +649,7 @@ walk_name_list (struct name_list *list, const char *name) | |||
| 695 | ! strncmp(list->name, name, name_len)) { | 649 | ! strncmp(list->name, name, name_len)) { |
| 696 | list->found = 1; | 650 | list->found = 1; |
| 697 | list->found_len = name_len; | 651 | list->found_len = name_len; |
| 698 | /* if required for name_lists that have not saved w_df, etc (eg exclude lists) */ | 652 | /* if required for parameter_lists that have not saved w_df, etc (eg exclude lists) */ |
| 699 | if (list->w_df) w_df = list->w_df; | 653 | if (list->w_df) w_df = list->w_df; |
| 700 | if (list->c_df) c_df = list->c_df; | 654 | if (list->c_df) c_df = list->c_df; |
| 701 | if (list->w_dfp>=0.0) w_dfp = list->w_dfp; | 655 | if (list->w_dfp>=0.0) w_dfp = list->w_dfp; |
