|
Packit Service |
b38f0b |
/*
|
|
Packit Service |
b38f0b |
* Host Resources MIB - File System device group implementation (HAL rewrite) - hrh_filesys.c
|
|
Packit Service |
b38f0b |
*
|
|
Packit Service |
b38f0b |
*/
|
|
Packit Service |
b38f0b |
/* Portions of this file are subject to the following copyright(s). See
|
|
Packit Service |
b38f0b |
* the Net-SNMP's COPYING file for more details and other copyrights
|
|
Packit Service |
b38f0b |
* that may apply:
|
|
Packit Service |
b38f0b |
*/
|
|
Packit Service |
b38f0b |
/*
|
|
Packit Service |
b38f0b |
* Portions of this file are copyrighted by:
|
|
Packit Service |
b38f0b |
* Copyright (C) 2007 Apple, Inc. All rights reserved.
|
|
Packit Service |
b38f0b |
* Use is subject to license terms specified in the COPYING file
|
|
Packit Service |
b38f0b |
* distributed with the Net-SNMP package.
|
|
Packit Service |
b38f0b |
*/
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
#include <net-snmp/net-snmp-config.h>
|
|
Packit Service |
b38f0b |
#include <net-snmp/net-snmp-features.h>
|
|
Packit Service |
b38f0b |
#include <net-snmp/net-snmp-includes.h>
|
|
Packit Service |
b38f0b |
#include <net-snmp/agent/net-snmp-agent-includes.h>
|
|
Packit Service |
b38f0b |
#include <net-snmp/agent/hardware/memory.h>
|
|
Packit Service |
b38f0b |
#include <net-snmp/agent/hardware/fsys.h>
|
|
Packit Service |
b38f0b |
#include "host_res.h"
|
|
Packit Service |
b38f0b |
#include "hrh_filesys.h"
|
|
Packit Service |
b38f0b |
#include "hrh_storage.h"
|
|
Packit Service |
b38f0b |
#include "hr_disk.h"
|
|
Packit Service |
b38f0b |
#include "hr_filesys.h"
|
|
Packit Service |
b38f0b |
#include <net-snmp/utilities.h>
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
#if HAVE_MNTENT_H
|
|
Packit Service |
b38f0b |
#include <mntent.h>
|
|
Packit Service |
b38f0b |
#endif
|
|
Packit Service |
b38f0b |
#if HAVE_SYS_MNTENT_H
|
|
Packit Service |
b38f0b |
#include <sys/mntent.h>
|
|
Packit Service |
b38f0b |
#endif
|
|
Packit Service |
b38f0b |
#if HAVE_SYS_MNTTAB_H
|
|
Packit Service |
b38f0b |
#include <sys/mnttab.h>
|
|
Packit Service |
b38f0b |
#endif
|
|
Packit Service |
b38f0b |
#if HAVE_SYS_STATVFS_H
|
|
Packit Service |
b38f0b |
#include <sys/statvfs.h>
|
|
Packit Service |
b38f0b |
#endif
|
|
Packit Service |
b38f0b |
#if HAVE_SYS_VFS_H
|
|
Packit Service |
b38f0b |
#include <sys/vfs.h>
|
|
Packit Service |
b38f0b |
#endif
|
|
Packit Service |
b38f0b |
#ifdef HAVE_SYS_PARAM_H
|
|
Packit Service |
b38f0b |
#include <sys/param.h>
|
|
Packit Service |
b38f0b |
#endif
|
|
Packit Service |
b38f0b |
#ifdef HAVE_SYS_MOUNT_H
|
|
Packit Service |
b38f0b |
#include <sys/mount.h>
|
|
Packit Service |
b38f0b |
#endif
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
#include <ctype.h>
|
|
Packit Service |
b38f0b |
#if HAVE_STRING_H
|
|
Packit Service |
b38f0b |
#include <string.h>
|
|
Packit Service |
b38f0b |
#endif
|
|
Packit Service |
b38f0b |
#if HAVE_STDLIB_H
|
|
Packit Service |
b38f0b |
#include <stdlib.h>
|
|
Packit Service |
b38f0b |
#endif
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
#if defined(aix4) || defined(aix5) || defined(aix6) || defined(aix7)
|
|
Packit Service |
b38f0b |
#include <sys/mntctl.h>
|
|
Packit Service |
b38f0b |
#include <sys/vmount.h>
|
|
Packit Service |
b38f0b |
#include <sys/statfs.h>
|
|
Packit Service |
b38f0b |
#endif
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
netsnmp_feature_require(date_n_time)
|
|
Packit Service |
b38f0b |
netsnmp_feature_require(ctime_to_timet)
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
#define HRFS_MONOTONICALLY_INCREASING
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
/*********************
|
|
Packit Service |
b38f0b |
*
|
|
Packit Service |
b38f0b |
* Kernel & interface information,
|
|
Packit Service |
b38f0b |
* and internal forward declarations
|
|
Packit Service |
b38f0b |
*
|
|
Packit Service |
b38f0b |
*********************/
|
|
Packit Service |
b38f0b |
netsnmp_fsys_info *HRFS_entry;
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
#define FULL_DUMP 0
|
|
Packit Service |
b38f0b |
#define PART_DUMP 1
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
static u_char *when_dumped(char *filesys, int level, size_t * length);
|
|
Packit Service |
b38f0b |
int header_hrhfilesys(struct variable *, oid *, size_t *, int,
|
|
Packit Service |
b38f0b |
size_t *, WriteMethod **);
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
/*********************
|
|
Packit Service |
b38f0b |
*
|
|
Packit Service |
b38f0b |
* Initialisation & common implementation functions
|
|
Packit Service |
b38f0b |
*
|
|
Packit Service |
b38f0b |
*********************/
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
#define HRFSYS_INDEX 1
|
|
Packit Service |
b38f0b |
#define HRFSYS_MOUNT 2
|
|
Packit Service |
b38f0b |
#define HRFSYS_RMOUNT 3
|
|
Packit Service |
b38f0b |
#define HRFSYS_TYPE 4
|
|
Packit Service |
b38f0b |
#define HRFSYS_ACCESS 5
|
|
Packit Service |
b38f0b |
#define HRFSYS_BOOT 6
|
|
Packit Service |
b38f0b |
#define HRFSYS_STOREIDX 7
|
|
Packit Service |
b38f0b |
#define HRFSYS_FULLDUMP 8
|
|
Packit Service |
b38f0b |
#define HRFSYS_PARTDUMP 9
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
struct variable4 hrfsys_variables[] = {
|
|
Packit Service |
b38f0b |
{HRFSYS_INDEX, ASN_INTEGER, NETSNMP_OLDAPI_RONLY,
|
|
Packit Service |
b38f0b |
var_hrhfilesys, 2, {1, 1}},
|
|
Packit Service |
b38f0b |
{HRFSYS_MOUNT, ASN_OCTET_STR, NETSNMP_OLDAPI_RONLY,
|
|
Packit Service |
b38f0b |
var_hrhfilesys, 2, {1, 2}},
|
|
Packit Service |
b38f0b |
{HRFSYS_RMOUNT, ASN_OCTET_STR, NETSNMP_OLDAPI_RONLY,
|
|
Packit Service |
b38f0b |
var_hrhfilesys, 2, {1, 3}},
|
|
Packit Service |
b38f0b |
{HRFSYS_TYPE, ASN_OBJECT_ID, NETSNMP_OLDAPI_RONLY,
|
|
Packit Service |
b38f0b |
var_hrhfilesys, 2, {1, 4}},
|
|
Packit Service |
b38f0b |
{HRFSYS_ACCESS, ASN_INTEGER, NETSNMP_OLDAPI_RONLY,
|
|
Packit Service |
b38f0b |
var_hrhfilesys, 2, {1, 5}},
|
|
Packit Service |
b38f0b |
{HRFSYS_BOOT, ASN_INTEGER, NETSNMP_OLDAPI_RONLY,
|
|
Packit Service |
b38f0b |
var_hrhfilesys, 2, {1, 6}},
|
|
Packit Service |
b38f0b |
{HRFSYS_STOREIDX, ASN_INTEGER, NETSNMP_OLDAPI_RONLY,
|
|
Packit Service |
b38f0b |
var_hrhfilesys, 2, {1, 7}},
|
|
Packit Service |
b38f0b |
{HRFSYS_FULLDUMP, ASN_OCTET_STR, NETSNMP_OLDAPI_RONLY,
|
|
Packit Service |
b38f0b |
var_hrhfilesys, 2, {1, 8}},
|
|
Packit Service |
b38f0b |
{HRFSYS_PARTDUMP, ASN_OCTET_STR, NETSNMP_OLDAPI_RONLY,
|
|
Packit Service |
b38f0b |
var_hrhfilesys, 2, {1, 9}},
|
|
Packit Service |
b38f0b |
};
|
|
Packit Service |
b38f0b |
oid hrfsys_variables_oid[] = { 1, 3, 6, 1, 2, 1, 25, 3, 8 };
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
void
|
|
Packit Service |
b38f0b |
init_hrh_filesys(void)
|
|
Packit Service |
b38f0b |
{
|
|
Packit Service |
b38f0b |
REGISTER_MIB("host/hr_filesys", hrfsys_variables, variable4,
|
|
Packit Service |
b38f0b |
hrfsys_variables_oid);
|
|
Packit Service |
b38f0b |
}
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
/*
|
|
Packit Service |
b38f0b |
* header_hrhfilesys(...
|
|
Packit Service |
b38f0b |
* Arguments:
|
|
Packit Service |
b38f0b |
* vp IN - pointer to variable entry that points here
|
|
Packit Service |
b38f0b |
* name IN/OUT - IN/name requested, OUT/name found
|
|
Packit Service |
b38f0b |
* length IN/OUT - length of IN/OUT oid's
|
|
Packit Service |
b38f0b |
* exact IN - TRUE if an exact match was requested
|
|
Packit Service |
b38f0b |
* var_len OUT - length of variable or 0 if function returned
|
|
Packit Service |
b38f0b |
* write_method
|
|
Packit Service |
b38f0b |
*
|
|
Packit Service |
b38f0b |
*/
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
int
|
|
Packit Service |
b38f0b |
header_hrhfilesys(struct variable *vp,
|
|
Packit Service |
b38f0b |
oid * name,
|
|
Packit Service |
b38f0b |
size_t * length,
|
|
Packit Service |
b38f0b |
int exact, size_t * var_len, WriteMethod ** write_method)
|
|
Packit Service |
b38f0b |
{
|
|
Packit Service |
b38f0b |
#define HRFSYS_ENTRY_NAME_LENGTH 11
|
|
Packit Service |
b38f0b |
oid newname[MAX_OID_LEN];
|
|
Packit Service |
b38f0b |
int fsys_idx, LowIndex = -1;
|
|
Packit Service |
b38f0b |
int result;
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
DEBUGMSGTL(("host/hr_filesys", "var_hrhfilesys: "));
|
|
Packit Service |
b38f0b |
DEBUGMSGOID(("host/hr_filesys", name, *length));
|
|
Packit Service |
b38f0b |
DEBUGMSG(("host/hr_filesys", " %d\n", exact));
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
memcpy((char *) newname, (char *) vp->name, vp->namelen * sizeof(oid));
|
|
Packit Service |
b38f0b |
/*
|
|
Packit Service |
b38f0b |
* Find "next" file system entry
|
|
Packit Service |
b38f0b |
*/
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
Init_HR_FileSys();
|
|
Packit Service |
b38f0b |
for (;;) {
|
|
Packit Service |
b38f0b |
fsys_idx = Get_Next_HR_FileSys();
|
|
Packit Service |
b38f0b |
if (fsys_idx == -1)
|
|
Packit Service |
b38f0b |
break;
|
|
Packit Service |
b38f0b |
newname[HRFSYS_ENTRY_NAME_LENGTH] = fsys_idx;
|
|
Packit Service |
b38f0b |
result = snmp_oid_compare(name, *length, newname, vp->namelen + 1);
|
|
Packit Service |
b38f0b |
if (exact && (result == 0)) {
|
|
Packit Service |
b38f0b |
LowIndex = fsys_idx;
|
|
Packit Service |
b38f0b |
break;
|
|
Packit Service |
b38f0b |
}
|
|
Packit Service |
b38f0b |
if ((!exact && (result < 0)) &&
|
|
Packit Service |
b38f0b |
(LowIndex == -1 || fsys_idx < LowIndex)) {
|
|
Packit Service |
b38f0b |
LowIndex = fsys_idx;
|
|
Packit Service |
b38f0b |
#ifdef HRFS_MONOTONICALLY_INCREASING
|
|
Packit Service |
b38f0b |
break;
|
|
Packit Service |
b38f0b |
#endif
|
|
Packit Service |
b38f0b |
}
|
|
Packit Service |
b38f0b |
}
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
if (LowIndex == -1) {
|
|
Packit Service |
b38f0b |
DEBUGMSGTL(("host/hr_filesys", "... index out of range\n"));
|
|
Packit Service |
b38f0b |
return (MATCH_FAILED);
|
|
Packit Service |
b38f0b |
}
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
memcpy((char *) name, (char *) newname,
|
|
Packit Service |
b38f0b |
(vp->namelen + 1) * sizeof(oid));
|
|
Packit Service |
b38f0b |
*length = vp->namelen + 1;
|
|
Packit Service |
b38f0b |
*write_method = NULL;
|
|
Packit Service |
b38f0b |
*var_len = sizeof(long); /* default to 'long' results */
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
DEBUGMSGTL(("host/hr_filesys", "... get filesys stats "));
|
|
Packit Service |
b38f0b |
DEBUGMSGOID(("host/hr_filesys", name, *length));
|
|
Packit Service |
b38f0b |
DEBUGMSG(("host/hr_filesys", "\n"));
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
return LowIndex;
|
|
Packit Service |
b38f0b |
}
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
oid fsys_type_id[] = { 1, 3, 6, 1, 2, 1, 25, 3, 9, 1 }; /* hrFSOther */
|
|
Packit Service |
b38f0b |
int fsys_type_len =
|
|
Packit Service |
b38f0b |
sizeof(fsys_type_id) / sizeof(fsys_type_id[0]);
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
/*********************
|
|
Packit Service |
b38f0b |
*
|
|
Packit Service |
b38f0b |
* System specific implementation functions
|
|
Packit Service |
b38f0b |
*
|
|
Packit Service |
b38f0b |
*********************/
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
u_char *
|
|
Packit Service |
b38f0b |
var_hrhfilesys(struct variable *vp,
|
|
Packit Service |
b38f0b |
oid * name,
|
|
Packit Service |
b38f0b |
size_t * length,
|
|
Packit Service |
b38f0b |
int exact, size_t * var_len, WriteMethod ** write_method)
|
|
Packit Service |
b38f0b |
{
|
|
Packit Service |
b38f0b |
int fsys_idx;
|
|
Packit Service |
b38f0b |
static char *string;
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
fsys_idx =
|
|
Packit Service |
b38f0b |
header_hrhfilesys(vp, name, length, exact, var_len, write_method);
|
|
Packit Service |
b38f0b |
if (fsys_idx == MATCH_FAILED)
|
|
Packit Service |
b38f0b |
return NULL;
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
switch (vp->magic) {
|
|
Packit Service |
b38f0b |
case HRFSYS_INDEX:
|
|
Packit Service |
b38f0b |
long_return = fsys_idx;
|
|
Packit Service |
b38f0b |
return (u_char *) & long_return;
|
|
Packit Service |
b38f0b |
case HRFSYS_MOUNT:
|
|
Packit Service |
b38f0b |
free(string);
|
|
Packit Service |
b38f0b |
string = NULL;
|
|
Packit Service |
b38f0b |
*var_len = 0;
|
|
Packit Service |
b38f0b |
if (asprintf(&string, "%s", HRFS_entry->path) >= 0)
|
|
Packit Service |
b38f0b |
*var_len = strlen(string);
|
|
Packit Service |
b38f0b |
return (u_char *) string;
|
|
Packit Service |
b38f0b |
case HRFSYS_RMOUNT:
|
|
Packit Service |
b38f0b |
free(string);
|
|
Packit Service |
b38f0b |
if (HRFS_entry->flags & NETSNMP_FS_FLAG_REMOTE) {
|
|
Packit Service |
b38f0b |
if (asprintf(&string, "%s", HRFS_entry->device) < 0)
|
|
Packit Service |
b38f0b |
string = NULL;
|
|
Packit Service |
b38f0b |
} else {
|
|
Packit Service |
b38f0b |
string = strdup("");
|
|
Packit Service |
b38f0b |
}
|
|
Packit Service |
b38f0b |
*var_len = string ? strlen(string) : 0;
|
|
Packit Service |
b38f0b |
return (u_char *) string;
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
case HRFSYS_TYPE:
|
|
Packit Service |
b38f0b |
fsys_type_id[fsys_type_len - 1] =
|
|
Packit Service |
b38f0b |
(HRFS_entry->type > _NETSNMP_FS_TYPE_LOCAL ?
|
|
Packit Service |
b38f0b |
NETSNMP_FS_TYPE_OTHER : HRFS_entry->type);
|
|
Packit Service |
b38f0b |
*var_len = sizeof(fsys_type_id);
|
|
Packit Service |
b38f0b |
return (u_char *) fsys_type_id;
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
case HRFSYS_ACCESS:
|
|
Packit Service |
b38f0b |
long_return = HRFS_entry->flags & NETSNMP_FS_FLAG_RONLY ? 2 : 1;
|
|
Packit Service |
b38f0b |
return (u_char *) & long_return;
|
|
Packit Service |
b38f0b |
case HRFSYS_BOOT:
|
|
Packit Service |
b38f0b |
long_return = HRFS_entry->flags & NETSNMP_FS_FLAG_BOOTABLE ? 1 : 2;
|
|
Packit Service |
b38f0b |
return (u_char *) & long_return;
|
|
Packit Service |
b38f0b |
case HRFSYS_STOREIDX:
|
|
Packit Service |
b38f0b |
long_return = fsys_idx + NETSNMP_MEM_TYPE_MAX;
|
|
Packit Service |
b38f0b |
return (u_char *) & long_return;
|
|
Packit Service |
b38f0b |
case HRFSYS_FULLDUMP:
|
|
Packit Service |
b38f0b |
return when_dumped(HRFS_entry->path, FULL_DUMP, var_len);
|
|
Packit Service |
b38f0b |
case HRFSYS_PARTDUMP:
|
|
Packit Service |
b38f0b |
return when_dumped(HRFS_entry->path, PART_DUMP, var_len);
|
|
Packit Service |
b38f0b |
default:
|
|
Packit Service |
b38f0b |
DEBUGMSGTL(("snmpd", "unknown sub-id %d in var_hrhfilesys\n",
|
|
Packit Service |
b38f0b |
vp->magic));
|
|
Packit Service |
b38f0b |
}
|
|
Packit Service |
b38f0b |
return NULL;
|
|
Packit Service |
b38f0b |
}
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
/*********************
|
|
Packit Service |
b38f0b |
*
|
|
Packit Service |
b38f0b |
* Internal implementation functions
|
|
Packit Service |
b38f0b |
*
|
|
Packit Service |
b38f0b |
*********************/
|
|
Packit Service |
b38f0b |
static int HRFS_index;
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
void
|
|
Packit Service |
b38f0b |
Init_HR_FileSys(void)
|
|
Packit Service |
b38f0b |
{
|
|
Packit Service |
b38f0b |
netsnmp_cache *c = netsnmp_fsys_get_cache();
|
|
Packit Service |
b38f0b |
netsnmp_cache_check_and_reload( c );
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
HRFS_entry = NULL;
|
|
Packit Service |
b38f0b |
HRFS_index = 0;
|
|
Packit Service |
b38f0b |
}
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
int
|
|
Packit Service |
b38f0b |
Get_Next_HR_FileSys(void)
|
|
Packit Service |
b38f0b |
{
|
|
Packit Service |
b38f0b |
if ( HRFS_entry ) {
|
|
Packit Service |
b38f0b |
HRFS_entry = netsnmp_fsys_get_next( HRFS_entry );
|
|
Packit Service |
b38f0b |
} else {
|
|
Packit Service |
b38f0b |
HRFS_entry = netsnmp_fsys_get_first();
|
|
Packit Service |
b38f0b |
}
|
|
Packit Service |
b38f0b |
/* Skip "inactive" entries */
|
|
Packit Service |
b38f0b |
while ( HRFS_entry && !(HRFS_entry->flags & NETSNMP_FS_FLAG_ACTIVE))
|
|
Packit Service |
b38f0b |
HRFS_entry = netsnmp_fsys_get_next( HRFS_entry );
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
HRFS_index = (HRFS_entry ? HRFS_entry->idx.oids[0] : -1 );
|
|
Packit Service |
b38f0b |
return HRFS_index;
|
|
Packit Service |
b38f0b |
}
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
static u_char *
|
|
Packit Service |
b38f0b |
when_dumped(char *filesys, int level, size_t * length)
|
|
Packit Service |
b38f0b |
{
|
|
Packit Service |
b38f0b |
time_t dumpdate = 0, tmp;
|
|
Packit Service |
b38f0b |
FILE *dump_fp;
|
|
Packit Service |
b38f0b |
char line[1024];
|
|
Packit Service |
b38f0b |
char *cp1, *cp2, *cp3;
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
/*
|
|
Packit Service |
b38f0b |
* Look for the relevent entries in /etc/dumpdates
|
|
Packit Service |
b38f0b |
*
|
|
Packit Service |
b38f0b |
* This is complicated by the fact that disks are
|
|
Packit Service |
b38f0b |
* mounted using block devices, but dumps are
|
|
Packit Service |
b38f0b |
* done via the raw character devices.
|
|
Packit Service |
b38f0b |
* Thus the device names in /etc/dumpdates and
|
|
Packit Service |
b38f0b |
* /etc/mnttab don't match.
|
|
Packit Service |
b38f0b |
* These comparisons are therefore made using the
|
|
Packit Service |
b38f0b |
* final portion of the device name only.
|
|
Packit Service |
b38f0b |
*/
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
if (*filesys == '\0') /* No filesystem name? */
|
|
Packit Service |
b38f0b |
return date_n_time(NULL, length);
|
|
Packit Service |
b38f0b |
cp1 = strrchr(filesys, '/'); /* Find the last element of the current FS */
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
if (cp1 == NULL)
|
|
Packit Service |
b38f0b |
cp1 = filesys;
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
if ((dump_fp = fopen("/etc/dumpdates", "r")) == NULL)
|
|
Packit Service |
b38f0b |
return date_n_time(NULL, length);
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
while (fgets(line, sizeof(line), dump_fp) != NULL) {
|
|
Packit Service |
b38f0b |
cp2 = strchr(line, ' '); /* Start by looking at the device name only */
|
|
Packit Service |
b38f0b |
if (cp2 != NULL) {
|
|
Packit Service |
b38f0b |
*cp2 = '\0';
|
|
Packit Service |
b38f0b |
cp3 = strrchr(line, '/'); /* and find the last element */
|
|
Packit Service |
b38f0b |
if (cp3 == NULL)
|
|
Packit Service |
b38f0b |
cp3 = line;
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
if (strcmp(cp1, cp3) != 0) /* Wrong FS */
|
|
Packit Service |
b38f0b |
continue;
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
++cp2;
|
|
Packit Service |
b38f0b |
while (isspace(0xFF & *cp2))
|
|
Packit Service |
b38f0b |
++cp2; /* Now find the dump level */
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
if (level == FULL_DUMP) {
|
|
Packit Service |
b38f0b |
if (*(cp2++) != '0')
|
|
Packit Service |
b38f0b |
continue; /* Not interested in partial dumps */
|
|
Packit Service |
b38f0b |
while (isspace(0xFF & *cp2))
|
|
Packit Service |
b38f0b |
++cp2;
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
dumpdate = ctime_to_timet(cp2);
|
|
Packit Service |
b38f0b |
fclose(dump_fp);
|
|
Packit Service |
b38f0b |
return date_n_time(&dumpdate, length);
|
|
Packit Service |
b38f0b |
} else { /* Partial Dump */
|
|
Packit Service |
b38f0b |
if (*(cp2++) == '0')
|
|
Packit Service |
b38f0b |
continue; /* Not interested in full dumps */
|
|
Packit Service |
b38f0b |
while (isspace(0xFF & *cp2))
|
|
Packit Service |
b38f0b |
++cp2;
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
tmp = ctime_to_timet(cp2);
|
|
Packit Service |
b38f0b |
if (tmp > dumpdate)
|
|
Packit Service |
b38f0b |
dumpdate = tmp; /* Remember the 'latest' partial dump */
|
|
Packit Service |
b38f0b |
}
|
|
Packit Service |
b38f0b |
}
|
|
Packit Service |
b38f0b |
}
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
fclose(dump_fp);
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
return date_n_time(&dumpdate, length);
|
|
Packit Service |
b38f0b |
}
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
#define RAW_DEVICE_PREFIX "/dev/rdsk"
|
|
Packit Service |
b38f0b |
#define COOKED_DEVICE_PREFIX "/dev/dsk"
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
char *
|
|
Packit Service |
b38f0b |
cook_device(char *dev)
|
|
Packit Service |
b38f0b |
{
|
|
Packit Service |
b38f0b |
static char cooked_dev[SNMP_MAXPATH+1];
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
if (!strncmp(dev, RAW_DEVICE_PREFIX, strlen(RAW_DEVICE_PREFIX))) {
|
|
Packit Service |
b38f0b |
strlcpy(cooked_dev, COOKED_DEVICE_PREFIX, sizeof(cooked_dev));
|
|
Packit Service |
b38f0b |
strlcat(cooked_dev, dev + strlen(RAW_DEVICE_PREFIX),
|
|
Packit Service |
b38f0b |
sizeof(cooked_dev));
|
|
Packit Service |
b38f0b |
} else {
|
|
Packit Service |
b38f0b |
strlcpy(cooked_dev, dev, sizeof(cooked_dev));
|
|
Packit Service |
b38f0b |
}
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
return cooked_dev;
|
|
Packit Service |
b38f0b |
}
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
int
|
|
Packit Service |
b38f0b |
Get_FSIndex(char *dev)
|
|
Packit Service |
b38f0b |
{
|
|
Packit Service |
b38f0b |
netsnmp_fsys_info *fsys;
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
fsys = netsnmp_fsys_by_device( dev, NETSNMP_FS_FIND_EXIST );
|
|
Packit Service |
b38f0b |
return (fsys ? fsys->idx.oids[0] : -1 );
|
|
Packit Service |
b38f0b |
}
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
long
|
|
Packit Service |
b38f0b |
Get_FSSize(char *dev)
|
|
Packit Service |
b38f0b |
{
|
|
Packit Service |
b38f0b |
netsnmp_fsys_info *fsys;
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
fsys = netsnmp_fsys_by_device( dev, NETSNMP_FS_FIND_EXIST );
|
|
Packit Service |
b38f0b |
if ( fsys )
|
|
Packit Service |
b38f0b |
return netsnmp_fsys_size( fsys );
|
|
Packit Service |
b38f0b |
else
|
|
Packit Service |
b38f0b |
return -1;
|
|
Packit Service |
b38f0b |
}
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
int
|
|
Packit Service |
b38f0b |
Check_HR_FileSys_NFS (void)
|
|
Packit Service |
b38f0b |
{
|
|
Packit Service |
b38f0b |
return (HRFS_entry->flags & NETSNMP_FS_FLAG_REMOTE) ? 1 : 0;
|
|
Packit Service |
b38f0b |
}
|
|
Packit Service |
99e695 |
|
|
Packit Service |
99e695 |
int
|
|
Packit Service |
99e695 |
Check_HR_FileSys_AutoFs (void)
|
|
Packit Service |
99e695 |
{
|
|
Packit Service |
99e695 |
return (HRFS_entry->type == (NETSNMP_FS_TYPE_AUTOFS)) ? 1 : 0;
|
|
Packit Service |
99e695 |
}
|