oi-extras/net-snmp/sun/agent/modules/seaExtensions/sunProcesses.c
author Andrzej Szeszo <aszeszo@gmail.com>
Wed, 22 Jun 2011 00:51:55 +0100
branchoi-extras
changeset 215 6eb7b62e444c
permissions -rw-r--r--
Added libusb and net-snmp packages
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
215
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
     1
/*
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
     2
 * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
     3
 *
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
     4
 * U.S. Government Rights - Commercial software. Government users are subject
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
     5
 * to the Sun Microsystems, Inc. standard license agreement and applicable
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
     6
 * provisions of the FAR and its supplements.
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
     7
 *
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
     8
 *
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
     9
 * This distribution may include materials developed by third parties. Sun,
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    10
 * Sun Microsystems, the Sun logo and Solaris are trademarks or registered
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    11
 * trademarks of Sun Microsystems, Inc. in the U.S. and other countries.
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    12
 *
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    13
 */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    14
/*
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    15
 * Note: this file originally auto-generated by mib2c using
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    16
 *         : mib2c.iterate.conf,v 5.5 2002/12/16 22:50:18 hardaker Exp $
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    17
 */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    18
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    19
#include <net-snmp/net-snmp-config.h>
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    20
#include <net-snmp/net-snmp-includes.h>
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    21
#include <net-snmp/agent/net-snmp-agent-includes.h>
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    22
#include "sunProcesses.h"
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    23
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    24
#include <stdio.h>
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    25
#include <errno.h>
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    26
#include <sys/types.h>
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    27
#include <sys/procfs.h>
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    28
#include <sys/fcntl.h>
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    29
#include <sys/stat.h>
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    30
#include <sys/time.h>
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    31
#include <sys/mntent.h>
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    32
#include <sys/mnttab.h>
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    33
#include <ftw.h>
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    34
#include <stdlib.h>
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    35
#include <dirent.h>
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    36
#include <string.h>
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    37
#include <memory.h>
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    38
#include <pwd.h>
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    39
#include <syslog.h>
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    40
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    41
#include "snmpvars.h"
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    42
#include "agent.h"
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    43
#include "asn1.h"
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    44
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    45
/* The following code is borrowed from ps.c */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    46
#define        NUID        64
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    47
#define TRUE 1
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    48
#define FALSE 0
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    49
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    50
#define NTTYS 20      /* max ttys that can be specified with the -t option  */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    51
#define SIZ 30        /* max processes that can be specified with -p and -g */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    52
#define ARGSIZ 30     /* size of buffer holding args for -t, -p, -u options */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    53
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    54
#define FSTYPE_MAX 8
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    55
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    56
#ifndef MAXLOGIN
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    57
#define MAXLOGIN 8    /* max number of chars in login that will be printed */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    58
#endif
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    59
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    60
#define UDQ 50
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    61
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    62
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    63
static struct prpsinfo info; /* process information structure from /proc */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    64
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    65
char *ttyname();
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    66
static char *psfile = "/tmp/mibiisa_ps_data";
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    67
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    68
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    69
static int ndev;             /* number of devices */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    70
static int maxdev;           /* number of devl structures allocated */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    71
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    72
#define DNSIZE 14
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    73
static struct devl {         /* device list */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    74
    char   dname[DNSIZE]; /* device name */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    75
    dev_t  dev;           /* device number */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    76
} *devl = NULL;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    77
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    78
static char *procdir = "/proc";  /* standard /proc directory */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    79
static int  rd_only = 0;         /* flag for remote filesystem read-only */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    80
void usage();             /* print usage message and quit */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    81
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    82
static time_t ps_cache_time = 0;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    83
time_t cache_now = 0;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    84
int cache_lifetime = 45;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    85
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    86
static void call_ftw_for_dev(void);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    87
static void wrdata();
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    88
static void write_tmp_file();
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    89
static int isprocdir();
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    90
static void get_ps_data(void);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    91
static void clean_ps(ps_ldata_t *);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    92
static char *get_usr_name(uid_t);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    93
static ps_data_t *find_ps_data(pid_t pid);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    94
static void pr_ps(void);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    95
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    96
ps_data_t *pstable = PS_NULL;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    97
int pstable_lines = 0;   /* # of items in memory block pointed    */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    98
                                /* to by pstable.                        */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    99
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   100
static void
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   101
clean_ps(ps_ldata_t *head)
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   102
{
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   103
    if (head != PS_LNULL) {
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   104
        ps_ldata_t *pdp;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   105
        ps_ldata_t *nxt;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   106
        for (pdp = head; pdp != PS_LNULL; pdp = nxt) {
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   107
            nxt = pdp->link;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   108
            free(pdp);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   109
        }
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   110
    }
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   111
}
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   112
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   113
static int
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   114
pscomp(ps_data_t *i, ps_data_t *j)
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   115
{
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   116
    return (i->pid - j->pid);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   117
}
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   118
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   119
static struct ncache {
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   120
    uid_t uid;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   121
    char  name[USRNM_SZ+1];
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   122
} nc[NUID];
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   123
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   124
/*
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   125
 * This function assumes that the password file is hashed
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   126
 * (or some such) to allow fast access based on a uid key.
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   127
 */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   128
static char *
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   129
get_usr_name(uid_t uid)
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   130
{
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   131
    struct passwd *pw;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   132
    int cp;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   133
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   134
#if        (((NUID) & ((NUID) - 1)) != 0)
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   135
cp = uid % (NUID);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   136
#else
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   137
cp = uid & ((NUID) - 1);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   138
#endif
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   139
    if (uid >= 0 && nc[cp].uid == uid && nc[cp].name[0])
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   140
        return (nc[cp].name);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   141
    pw = getpwuid(uid);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   142
    if (!pw)
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   143
        return ((char *)0);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   144
    nc[cp].uid = uid;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   145
    strncpy(nc[cp].name, pw->pw_name, USRNM_SZ);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   146
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   147
    return (nc[cp].name);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   148
}
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   149
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   150
void
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   151
pr_ps(void)
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   152
{
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   153
    ps_data_t *psp;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   154
    int lines;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   155
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   156
    printf("%d entries\n", pstable_lines);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   157
    printf("UID   PID   PPID   SZ   USR   WCHAN  TTY  CPU  CMD \n\n");
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   158
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   159
    for (psp = pstable, lines = 0; lines < pstable_lines; psp++, lines++) {
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   160
        printf("%d     %u     %u        %d    %s     %s    %s    %d   %s\n",
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   161
            psp->uid,
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   162
            psp->pid,
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   163
            psp->ppid,
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   164
            psp->sz,
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   165
            psp->usrname,
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   166
            psp->wchan,
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   167
            psp->tty,
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   168
            psp->cpu,
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   169
            psp->cmd);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   170
    }
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   171
}
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   172
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   173
/*
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   174
 *  Locate a particular PID.
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   175
 *  Return a pointer to the entry or NULL if not found.
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   176
 */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   177
static ps_data_t * find_ps_data(pid_t pid)
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   178
{
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   179
    ps_data_t *psp;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   180
    ps_data_t key;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   181
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   182
    key.pid = pid;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   183
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   184
    /* Should add a cache here */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   185
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   186
    psp = (ps_data_t *)bsearch((char *)&key, (char *)pstable,
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   187
                            pstable_lines, sizeof (ps_data_t),
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   188
                            (int (*)())pscomp);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   189
    return (psp);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   190
}
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   191
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   192
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   193
void
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   194
get_ps_data(void)
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   195
{
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   196
    ps_ldata_t *ps_last = PS_LNULL;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   197
    ps_ldata_t *ps_head = PS_LNULL;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   198
    ps_ldata_t *psp;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   199
    ps_data_t  *pstp;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   200
    static char *usrname;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   201
    int i = 0;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   202
    DIR *dirp;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   203
    struct dirent *dentp;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   204
    char pname[MAXNAMELEN];
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   205
    int pdlen;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   206
    char *gettty();
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   207
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   208
    if (pstable != PS_NULL) {  /* Don't run ps unless we need to */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   209
        if ((cache_now - ps_cache_time) <= cache_lifetime)
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   210
            return;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   211
        free(pstable);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   212
    }
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   213
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   214
    pstable_lines = 0;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   215
    ps_cache_time = cache_now;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   216
    /*
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   217
     * Determine root path for remote machine.
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   218
     */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   219
    if (!readata()) {        /* get data from psfile */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   220
        call_ftw_for_dev();
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   221
        wrdata();
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   222
    }
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   223
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   224
    /*
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   225
     * Determine which processes to print info about by searching
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   226
     * the /proc directory and looking at each process.
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   227
     */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   228
    if ((dirp = opendir(procdir)) == NULL) {
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   229
        (void) SYSLOG0("Cannot open PROC directory\n");
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   230
        return;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   231
    }
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   232
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   233
    (void) strcpy(pname, procdir);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   234
    pdlen = strlen(pname);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   235
    pname[pdlen++] = '/';
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   236
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   237
    /* for each active process --- */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   238
    while (dentp = readdir(dirp)) {
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   239
        int procfd;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   240
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   241
        if (dentp->d_name[0] == '.')                /* skip . and .. */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   242
                continue;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   243
        (void) strcpy(pname + pdlen, dentp->d_name);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   244
retry:
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   245
        if ((procfd = open(pname, O_RDONLY)) == -1)
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   246
                continue;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   247
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   248
        /*
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   249
         * Get the info structure for the process and close quickly.
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   250
         */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   251
        if (ioctl(procfd, PIOCPSINFO, (char *)&info) == -1) {
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   252
            int saverr = errno;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   253
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   254
            (void) close(procfd);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   255
            if (saverr == EAGAIN)
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   256
                goto retry;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   257
            if (saverr != ENOENT)
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   258
                (void) SYSLOG2("PIOCPSINFO on %s: %s\n",
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   259
                               pname, strerror(saverr));
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   260
            continue;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   261
        }
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   262
        (void) close(procfd);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   263
        if ((psp = (ps_ldata_t *)malloc(sizeof (ps_ldata_t))) == PS_LNULL)
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   264
            break;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   265
        memset((char *)psp, 0, sizeof (ps_ldata_t));
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   266
        psp->pdata.uid = info.pr_uid;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   267
        psp->pdata.pid = info.pr_pid;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   268
        psp->pdata.ppid = info.pr_ppid;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   269
        psp->pdata.sz = info.pr_size;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   270
        if (info.pr_wchan)
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   271
            sprintf(psp->pdata.wchan, "%9x", info.pr_wchan);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   272
        else
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   273
            strcpy(psp->pdata.wchan, "         ");
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   274
        memset(&psp->pdata.stat[0], 0, STAT_SZ+1);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   275
        if (info.pr_sname)
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   276
            psp->pdata.stat[0] = info.pr_sname;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   277
        i = 0;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   278
        strcpy(psp->pdata.tty, (char *)gettty(&i));
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   279
        psp->pdata.cpu = info.pr_time.tv_sec;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   280
        strcpy(psp->pdata.cmd, info.pr_fname);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   281
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   282
        if ((usrname = (get_usr_name(psp->pdata.uid))) != NULL)
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   283
            strncpy(psp->pdata.usrname, usrname, USRNM_SZ);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   284
        else {
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   285
            free(psp);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   286
            continue;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   287
        }
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   288
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   289
        psp->pdata.usrname[USRNM_SZ] = '\0';
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   290
        pstable_lines++;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   291
        if (ps_last == PS_LNULL)
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   292
            ps_head = psp;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   293
        else
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   294
            ps_last->link = psp;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   295
        ps_last = psp;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   296
    }
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   297
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   298
    (void) closedir(dirp);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   299
    if ((pstable = (ps_data_t *)malloc(pstable_lines
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   300
                    * sizeof (ps_data_t))) == PS_NULL) {
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   301
        clean_ps(ps_head);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   302
        return;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   303
    }
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   304
    for (pstp = pstable, psp = ps_head; psp != PS_LNULL;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   305
                                    pstp++, psp = psp->link) {
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   306
        memcpy((char *)pstp, (char *)&(psp->pdata), sizeof (ps_data_t));
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   307
    }
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   308
    clean_ps(ps_head);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   309
    qsort(pstable, pstable_lines, sizeof (ps_data_t), (int (*)())pscomp);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   310
}
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   311
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   312
int
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   313
readata()
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   314
{
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   315
    struct stat sbuf1, sbuf2;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   316
    int fd;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   317
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   318
    if ((fd = open(psfile, O_RDONLY)) == -1)
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   319
        return (0);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   320
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   321
    if (fstat(fd, &sbuf1) < 0 || sbuf1.st_size == 0 ||
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   322
        stat("/dev", &sbuf2) == -1 || sbuf1.st_mtime <= sbuf2.st_mtime ||
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   323
        sbuf1.st_mtime <= sbuf2.st_ctime) {
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   324
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   325
        if (!rd_only) {                /* if read-only, believe old data */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   326
            (void) close(fd);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   327
            return (0);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   328
        }
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   329
    }
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   330
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   331
    /* Read /dev data from psfile. */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   332
    if (read_tmp_file(fd, (char *) &ndev, sizeof (ndev)) == 0)  {
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   333
        (void) close(fd);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   334
        return (0);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   335
    }
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   336
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   337
    if (devl)
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   338
        free(devl);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   339
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   340
    if ((devl = (struct devl *)malloc(ndev * sizeof (*devl))) == NULL) {
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   341
        SYSLOG1("malloc() for device table failed, %s\n", strerror(errno));
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   342
        exit(1);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   343
    }
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   344
    if (read_tmp_file(fd, (char *)devl, ndev * sizeof (*devl)) == 0)  {
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   345
        (void) close(fd);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   346
        return (0);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   347
    }
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   348
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   349
    (void) close(fd);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   350
    return (1);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   351
}
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   352
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   353
/*
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   354
 * call_ftw_for_dev() uses ftw() to pass pathnames under /dev to gdev()
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   355
 * along with a status buffer.
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   356
 */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   357
static void
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   358
call_ftw_for_dev(void)
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   359
{
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   360
    int gdev();
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   361
    int rcode;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   362
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   363
    ndev = 0;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   364
    rcode = ftw("/dev", gdev, 17);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   365
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   366
    switch (rcode) {
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   367
    case 0:
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   368
        return;                /* successful return, devl populated */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   369
    case 1:
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   370
        SYSLOG0(" ftw() encountered problem\n");
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   371
        break;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   372
    case -1:
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   373
        SYSLOG1(" ftw() failed, %s\n", strerror(errno));
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   374
        break;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   375
    default:
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   376
        SYSLOG1(" ftw() unexpected return, rcode=%d\n", rcode);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   377
        break;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   378
    }
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   379
    exit(1);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   380
}
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   381
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   382
/*
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   383
 * gdev() puts device names and ID into the devl structure for character
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   384
 * special files in /dev.  The "/dev/" string is stripped from the name
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   385
 * and if the resulting pathname exceeds DNSIZE in length then the highest
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   386
 * level directory names are stripped until the pathname is DNSIZE or less.
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   387
 */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   388
int
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   389
gdev(objptr, statp, numb)
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   390
    char        *objptr;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   391
    struct stat *statp;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   392
    int        numb;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   393
{
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   394
    int i;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   395
    int leng, start;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   396
    static struct devl ldevl[2];
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   397
    static int lndev, consflg;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   398
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   399
    switch (numb) {
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   400
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   401
    case FTW_F:
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   402
        if ((statp->st_mode & S_IFMT) == S_IFCHR) {
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   403
            /* Get more and be ready for syscon & systty. */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   404
            while (ndev + lndev >= maxdev) {
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   405
                maxdev += UDQ;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   406
                devl = (struct devl *) ((devl == NULL) ?
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   407
                            malloc(sizeof (struct devl) * maxdev) :
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   408
                            realloc(devl, sizeof (struct devl) * maxdev));
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   409
                if (devl == NULL) {
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   410
                    SYSLOG1(" not enough memory for %d devices\n", maxdev);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   411
                    exit(1);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   412
                }
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   413
            }
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   414
            /*
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   415
             * Save systty & syscon entries if the console
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   416
             * entry hasn't been seen.
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   417
             */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   418
            if (!consflg && (strcmp("/dev/systty", objptr) == 0 ||
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   419
                strcmp("/dev/syscon", objptr) == 0)) {
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   420
                (void) strncpy(ldevl[lndev].dname, &objptr[5], DNSIZE);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   421
                ldevl[lndev].dev = statp->st_rdev;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   422
                lndev++;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   423
                return (0);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   424
            }
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   425
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   426
            leng = strlen(objptr);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   427
            /* Strip off /dev/ */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   428
            if (leng < DNSIZE + 4)
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   429
                (void) strcpy(devl[ndev].dname, &objptr[5]);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   430
            else {
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   431
                start = leng - DNSIZE - 1;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   432
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   433
                for (i = start; i < leng && (objptr[i] != '/'); i++)
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   434
                            ;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   435
                if (i == leng)
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   436
                    (void) strncpy(devl[ndev].dname,
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   437
                                    &objptr[start], DNSIZE);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   438
                else
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   439
                    (void) strncpy(devl[ndev].dname,
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   440
                                    &objptr[i+1], DNSIZE);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   441
            }
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   442
            devl[ndev].dev = statp->st_rdev;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   443
            ndev++;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   444
            /*
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   445
             * Put systty & syscon entries in devl when console
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   446
             * is found.
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   447
             */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   448
            if (strcmp("/dev/console", objptr) == 0) {
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   449
                consflg++;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   450
                for (i = 0; i < lndev; i++) {
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   451
                    (void) strncpy(devl[ndev].dname,
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   452
                                    ldevl[i].dname, DNSIZE);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   453
                    devl[ndev].dev = ldevl[i].dev;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   454
                    ndev++;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   455
                }
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   456
                lndev = 0;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   457
            }
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   458
        }
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   459
        return (0);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   460
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   461
    case FTW_D:
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   462
    case FTW_DNR:
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   463
    case FTW_NS:
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   464
        return (0);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   465
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   466
    default:
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   467
        SYSLOG1(" gdev() error, %d, encountered\n", numb);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   468
        return (1);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   469
    }
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   470
}
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   471
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   472
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   473
void
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   474
wrdata()
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   475
{
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   476
    char tmpname[MAXNAMELEN];
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   477
    char *tfname;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   478
    int        fd;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   479
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   480
    (void) umask(02);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   481
    (void) strcpy(tmpname, "/tmp/mibiisa_ps.XXXXXX");
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   482
    if ((tfname = mktemp(tmpname)) == NULL || *tfname == '\0') {
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   483
        SYSLOG1(" mktemp(\"/tmp/mibiisa_ps.XXXXXX\") failed, %s\n",
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   484
                strerror(errno));
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   485
        return;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   486
    }
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   487
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   488
    if ((fd = open(tfname, O_WRONLY|O_CREAT|O_EXCL, 0664)) < 0) {
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   489
        SYSLOG2(" open(\"%s\") for write failed, %s\n",
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   490
                tfname, strerror(errno));
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   491
        return;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   492
    }
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   493
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   494
    /*
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   495
     * Make owner root, group sys.
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   496
     */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   497
    (void) chown(tfname, (uid_t)0, (gid_t)3);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   498
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   499
    /* write /dev data */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   500
    write_tmp_file(fd, (char *) &ndev, sizeof (ndev));
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   501
    write_tmp_file(fd, (char *)devl, ndev * sizeof (*devl));
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   502
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   503
    (void) close(fd);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   504
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   505
    if (rename(tfname, psfile) != 0) {
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   506
        SYSLOG2(" rename(\"%s\",\"%s\") failed\n", tfname, psfile);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   507
        return;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   508
    }
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   509
}
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   510
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   511
/*
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   512
 * gettty returns the user's tty number or ? if none.
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   513
 */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   514
char *
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   515
gettty(ip)
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   516
int        *ip;        /* where the search left off last time */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   517
{
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   518
    int        i;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   519
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   520
    if (info.pr_ttydev != PRNODEV && *ip >= 0) {
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   521
        for (i = *ip; i < ndev; i++) {
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   522
            if (devl[i].dev == info.pr_ttydev) {
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   523
                *ip = i + 1;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   524
                return (devl[i].dname);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   525
            }
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   526
        }
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   527
    }
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   528
    *ip = -1;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   529
    return ("?");
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   530
}
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   531
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   532
/*
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   533
 * Special read; unlinks psfile on read error.
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   534
 */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   535
int
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   536
read_tmp_file(fd, bp, bs)
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   537
    int fd;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   538
    char *bp;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   539
    unsigned int bs;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   540
{
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   541
    int rbs;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   542
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   543
    if ((rbs = read(fd, bp, bs)) != bs) {
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   544
        SYSLOG2("read_tmp_file() error on read, rbs=%d, bs=%d\n",
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   545
                rbs, bs);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   546
        (void) unlink(psfile);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   547
        return (0);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   548
    }
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   549
    return (1);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   550
}
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   551
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   552
/*
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   553
 * Special write; unlinks psfile on write error.
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   554
 */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   555
void
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   556
write_tmp_file(fd, bp, bs)
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   557
int fd;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   558
char *bp;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   559
unsigned bs;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   560
{
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   561
    int wbs;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   562
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   563
    if ((wbs = write(fd, bp, bs)) != bs) {
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   564
        SYSLOG2("write_tmp_file() error on write, wbs=%d, bs=%d\n",
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   565
                wbs, bs);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   566
        (void) unlink(psfile);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   567
    }
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   568
}
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   569
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   570
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   571
/*
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   572
 * Return true iff dir is a /proc directory.
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   573
 *
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   574
 * This works because of the fact that "/proc/0" and "/proc/00" are the
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   575
 * same file, namely process 0, and are not linked to each other.  Ugly.
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   576
 */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   577
static int
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   578
isprocdir(dir)                /* return TRUE iff dir is a PROC directory */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   579
    char *dir;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   580
{
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   581
    struct stat stat1;        /* dir/0  */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   582
    struct stat stat2;        /* dir/00 */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   583
    char path[200];
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   584
    char *p;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   585
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   586
    /*
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   587
     * Make a copy of the directory name without trailing '/'s
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   588
     */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   589
    if (dir == NULL)
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   590
        (void) strcpy(path, ".");
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   591
    else {
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   592
        (void) strncpy(path, dir, (int) sizeof (path) - 4);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   593
        path[sizeof (path)-4] = '\0';
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   594
        p = path + strlen(path);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   595
        while (p > path && *--p == '/')
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   596
            *p = '\0';
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   597
        if (*path == '\0')
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   598
            (void) strcpy(path, ".");
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   599
    }
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   600
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   601
    /*
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   602
     * Append "/0" to the directory path and stat() the file.
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   603
     */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   604
    p = path + strlen(path);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   605
    *p++ = '/';
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   606
    *p++ = '0';
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   607
    *p = '\0';
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   608
    if (stat(path, &stat1) != 0)
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   609
        return (FALSE);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   610
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   611
    /*
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   612
     * Append "/00" to the directory path and stat() the file.
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   613
     */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   614
    *p++ = '0';
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   615
    *p = '\0';
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   616
    if (stat(path, &stat2) != 0)
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   617
        return (FALSE);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   618
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   619
    /*
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   620
     * See if we ended up with the same file.
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   621
     */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   622
    if (stat1.st_dev != stat2.st_dev || stat1.st_ino != stat2.st_ino ||
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   623
        stat1.st_mode != stat2.st_mode ||
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   624
        stat1.st_nlink != stat2.st_nlink ||
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   625
        stat1.st_uid != stat2.st_uid || stat1.st_gid != stat2.st_gid ||
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   626
        stat1.st_size != stat2.st_size)
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   627
        return (FALSE);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   628
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   629
    /*
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   630
     * Return TRUE iff we have a regular file with a single link.
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   631
     */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   632
    return ((stat1.st_mode & S_IFMT) == S_IFREG && stat1.st_nlink == 1);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   633
}
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   634
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   635
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   636
/*
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   637
 * Initialize the sunProcessTable table by defining its contents and how
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   638
 * it's structured
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   639
 */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   640
void initialize_table_sunProcessTable(void) {
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   641
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   642
    static oid sunProcessTable_oid[] = {1, 3, 6, 1, 4, 1, 42, 3, 12};
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   643
    netsnmp_table_registration_info *table_info;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   644
    netsnmp_handler_registration *my_handler;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   645
    netsnmp_iterator_info *iinfo;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   646
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   647
    /* create the table structure itself */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   648
    table_info = SNMP_MALLOC_TYPEDEF(netsnmp_table_registration_info);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   649
    iinfo = SNMP_MALLOC_TYPEDEF(netsnmp_iterator_info);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   650
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   651
    /*
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   652
     * if your table is read only, it's easiest to change the
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   653
     * HANDLER_CAN_RWRITE definition below to HANDLER_CAN_RONLY
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   654
     */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   655
    my_handler = netsnmp_create_handler_registration("sunProcessTable",
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   656
                                            sunProcessTable_handler,
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   657
                                            sunProcessTable_oid,
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   658
                                            OID_LENGTH(sunProcessTable_oid),
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   659
                                            HANDLER_CAN_RWRITE);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   660
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   661
    if (!my_handler || !table_info || !iinfo)
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   662
        return; /* mallocs failed */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   663
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   664
    /*
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   665
     * Setting up the table's definition
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   666
     */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   667
    netsnmp_table_helper_add_indexes(table_info, ASN_INTEGER, 0);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   668
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   669
    table_info->min_column = 1;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   670
    table_info->max_column = 11;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   671
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   672
    /* iterator access routines */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   673
    iinfo->get_first_data_point = sunProcessTable_get_first_data_point;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   674
    iinfo->get_next_data_point = sunProcessTable_get_next_data_point;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   675
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   676
    iinfo->table_reginfo = table_info;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   677
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   678
    /*
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   679
     * registering the table with the master agent
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   680
     */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   681
    DEBUGMSGTL(("initialize_table_sunProcessTable",
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   682
                "Registering table sunProcessTable as a table iterator\n"));
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   683
    netsnmp_register_table_iterator(my_handler, iinfo);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   684
}
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   685
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   686
/* Initializes the sunProcesses module */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   687
void init_sunProcesses(void) {
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   688
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   689
    (void) time(&cache_now);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   690
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   691
    /* here we initialize all the tables we're planning on supporting */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   692
    initialize_table_sunProcessTable();
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   693
}
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   694
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   695
/*
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   696
 * returns the first data point within the sunProcessTable table data.
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   697
 *
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   698
 * Set the my_loop_context variable to the first data point structure
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   699
 * of your choice (from which you can find the next one). This could
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   700
 * be anything from the first node in a linked list, to an integer
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   701
 * pointer containing the beginning of an array variable.
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   702
 *
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   703
 * Set the my_data_context variable to something to be returned to
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   704
 * you later that will provide you with the data to return in a given
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   705
 * row. * This could be the same pointer as what my_loop_context is
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   706
 * set to, or something different.
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   707
 *
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   708
 * The put_index_data variable contains a list of snmp variable
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   709
 * bindings, one for each index in your table. * Set the values of
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   710
 * each appropriately according to the data matching the first row
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   711
 * and return the put_index_data variable at the end of the function.
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   712
 */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   713
netsnmp_variable_list *
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   714
sunProcessTable_get_first_data_point(void **my_loop_context,
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   715
                                void **my_data_context,
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   716
                                netsnmp_variable_list *put_index_data,
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   717
                                netsnmp_iterator_info *mydata) {
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   718
    long long_type;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   719
    netsnmp_variable_list *vptr;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   720
    ps_data_t *ps_ptr;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   721
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   722
    get_ps_data();
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   723
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   724
    ps_ptr = pstable;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   725
    if (ps_ptr == NULL) {
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   726
        return (NULL);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   727
    }
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   728
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   729
    *my_loop_context = ps_ptr;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   730
    *my_data_context = ps_ptr;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   731
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   732
    vptr = put_index_data;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   733
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   734
    long_type = (long)ps_ptr[0].pid;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   735
    snmp_set_var_value(vptr, (u_char *) &long_type, sizeof(long_type));
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   736
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   737
    /*    vptr = vptr->next_variable; */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   738
/*
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   739
pr_ps();
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   740
*/
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   741
    return (put_index_data);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   742
}
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   743
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   744
/*
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   745
 * functionally the same as sunProcessTable_get_first_data_point, but
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   746
 * my_loop_context has already been set to a previous value and should
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   747
 * be updated to the next in the list.  For example, if it was a
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   748
 * linked list, you might want to cast it and the return
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   749
 * my_loop_context->next.  The my_data_context pointer should be set
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   750
 * to something you need later and the indexes in put_index_data
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   751
 * updated again.
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   752
 */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   753
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   754
netsnmp_variable_list *
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   755
sunProcessTable_get_next_data_point(void **my_loop_context,
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   756
                                        void **my_data_context,
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   757
                                        netsnmp_variable_list *put_index_data,
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   758
                                        netsnmp_iterator_info *mydata)
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   759
{
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   760
    long long_type;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   761
    netsnmp_variable_list *vptr;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   762
    ps_data_t *ps_ptr;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   763
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   764
    get_ps_data();
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   765
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   766
    ps_ptr = (ps_data_t *) (*my_loop_context);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   767
    ps_ptr++;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   768
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   769
    if (ps_ptr > &(pstable[pstable_lines - 1])) {
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   770
        return (NULL);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   771
    }
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   772
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   773
    *my_loop_context = ps_ptr;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   774
    *my_data_context = ps_ptr;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   775
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   776
    vptr = put_index_data;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   777
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   778
    long_type = (long)ps_ptr[0].pid;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   779
    snmp_set_var_value(vptr, (u_char *) &long_type, sizeof(long_type));
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   780
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   781
    /*    vptr = vptr->next_variable; */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   782
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   783
    return (put_index_data);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   784
}
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   785
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   786
/*
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   787
 * handles requests for the sunProcessTable table,
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   788
 * if anything else needs to be done
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   789
 */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   790
int sunProcessTable_handler(netsnmp_mib_handler *handler,
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   791
                        netsnmp_handler_registration *reginfo,
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   792
                        netsnmp_agent_request_info *reqinfo,
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   793
                        netsnmp_request_info *requests) {
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   794
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   795
    long long_type;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   796
    netsnmp_request_info *request;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   797
    netsnmp_table_request_info *table_info;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   798
    netsnmp_variable_list *var;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   799
    ps_data_t *psp;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   800
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   801
    /* For caching purposes, find out what the time is now */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   802
    (void) time(&cache_now);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   803
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   804
    for (request = requests; request; request = request->next) {
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   805
        var = request->requestvb;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   806
        if (request->processed != 0)
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   807
            continue;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   808
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   809
        /* perform anything here that you need to do before each */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   810
        /* request is processed. */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   811
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   812
        /* the following extracts the my_data_context pointer set in */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   813
        /* the loop functions above.  You can then use the results to */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   814
        /* help return data for the columns of the sunProcessTable */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   815
        /* table in question */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   816
        psp = (ps_data_t *) netsnmp_extract_iterator_context(request);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   817
        if (psp == NULL) {
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   818
            if (reqinfo->mode == MODE_GET ||
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   819
                reqinfo->mode == MODE_SET_RESERVE1) {
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   820
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   821
                netsnmp_set_request_error(reqinfo, request,
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   822
                                            SNMP_NOSUCHINSTANCE);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   823
                continue;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   824
            }
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   825
            /*
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   826
             * XXX: no row existed, if you support creation and this is a
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   827
             * set, start dealing with it here, else continue
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   828
             */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   829
        }
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   830
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   831
        /* extracts the information about the table from the request */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   832
        table_info = netsnmp_extract_table_info(request);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   833
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   834
        /* table_info->colnum contains the column number requested */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   835
        /* table_info->indexes contains a linked list of snmp variable */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   836
        /* bindings for the indexes of the table.  Values in the list */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   837
        /* have been set corresponding to the indexes of the request */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   838
        if (table_info == NULL) {
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   839
            continue;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   840
        }
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   841
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   842
        switch (reqinfo->mode) {
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   843
        /*
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   844
         * the table_iterator helper should change all GETNEXTs
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   845
         * into GETs for you automatically, so you don't have to
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   846
         * worry about the GETNEXT case.  Only GETs and SETs need
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   847
         * to be dealt with here
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   848
         */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   849
        case MODE_GET:
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   850
            switch (table_info->colnum) {
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   851
            case COLUMN_PSPROCESSID:
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   852
                long_type = (long)psp->pid;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   853
                snmp_set_var_typed_value(var, ASN_INTEGER,
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   854
                                    (u_char *) &long_type,
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   855
                                    sizeof (long_type));
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   856
                break;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   857
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   858
            case COLUMN_PSPARENTPROCESSID:
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   859
                long_type = (long)psp->ppid;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   860
                snmp_set_var_typed_value(var, ASN_INTEGER,
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   861
                                    (u_char *) &long_type,
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   862
                                    sizeof (long_type));
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   863
                break;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   864
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   865
            case COLUMN_PSPROCESSSIZE:
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   866
                long_type = (long)psp->sz;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   867
                snmp_set_var_typed_value(var, ASN_INTEGER,
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   868
                                    (u_char *) &long_type,
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   869
                                    sizeof (long_type));
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   870
                break;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   871
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   872
            case COLUMN_PSPROCESSCPUTIME:
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   873
                long_type = (long)psp->cpu;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   874
                snmp_set_var_typed_value(var, ASN_INTEGER,
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   875
                                    (u_char *) &long_type,
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   876
                                    sizeof (long_type));
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   877
                break;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   878
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   879
            case COLUMN_PSPROCESSSTATE:
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   880
                snmp_set_var_typed_value(var, ASN_OCTET_STR,
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   881
                                    (u_char *) &psp->stat,
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   882
                                    strlen(psp->stat));
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   883
                break;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   884
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   885
            case COLUMN_PSPROCESSWAITCHANNEL:
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   886
                snmp_set_var_typed_value(var, ASN_OCTET_STR,
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   887
                                    (u_char *) &psp->wchan,
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   888
                                    strlen(psp->wchan));
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   889
                break;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   890
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   891
            case COLUMN_PSPROCESSTTY:
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   892
                snmp_set_var_typed_value(var, ASN_OCTET_STR,
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   893
                                    (u_char *) &psp->tty,
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   894
                                    strlen(psp->tty));
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   895
                break;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   896
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   897
            case COLUMN_PSPROCESSUSERNAME:
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   898
                snmp_set_var_typed_value(var, ASN_OCTET_STR,
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   899
                                    (u_char *) &psp->usrname,
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   900
                                    strlen(psp->usrname));
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   901
                break;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   902
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   903
            case COLUMN_PSPROCESSUSERID:
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   904
                long_type = (long)psp->uid;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   905
                snmp_set_var_typed_value(var, ASN_INTEGER,
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   906
                                    (u_char *) &long_type,
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   907
                                    sizeof (long_type));
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   908
                break;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   909
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   910
            case COLUMN_PSPROCESSNAME:
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   911
                snmp_set_var_typed_value(var, ASN_OCTET_STR,
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   912
                                    (u_char *) &psp->cmd,
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   913
                                    strlen(psp->cmd));
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   914
                break;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   915
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   916
            case COLUMN_PSPROCESSSTATUS:
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   917
                long_type = (long)psp->sz;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   918
                snmp_set_var_typed_value(var, ASN_INTEGER,
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   919
                                    (u_char *) &long_type,
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   920
                                    sizeof (long_type));
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   921
                break;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   922
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   923
            default:
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   924
                /* We shouldn't get here */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   925
                snmp_log(LOG_ERR,
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   926
"problem encountered in sunProcessTable_handler: unknown column\n");
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   927
            }
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   928
            break;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   929
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   930
        case MODE_SET_RESERVE1:
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   931
            break;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   932
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   933
        case MODE_SET_RESERVE2:
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   934
            break;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   935
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   936
        case MODE_SET_FREE:
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   937
            break;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   938
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   939
        case MODE_SET_ACTION:
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   940
            /* set handling... */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   941
/* XXX don't know about 64 bit */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   942
            if ((int) *(requests->requestvb->val.integer) != 0) {
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   943
                (void) kill(psp->pid,
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   944
                        (int)*(requests->requestvb->val.integer));
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   945
            }
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   946
            break;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   947
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   948
        case MODE_SET_COMMIT:
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   949
            break;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   950
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   951
        case MODE_SET_UNDO:
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   952
            break;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   953
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   954
        default:
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   955
            snmp_log(LOG_ERR,
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   956
    "problem encountered in sunProcessTable_handler: unsupported mode\n");
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   957
        }
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   958
    }
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   959
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   960
    return (SNMP_ERR_NOERROR);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   961
}