int sh_count_myprocs(struct myproc *proc) { if (proc == NULL) return 0; #if defined(USING_HOST_DATA_ACCESS_SWRUN_MODULE) && defined(HAVE_PCRE_H) if (proc->regexp != NULL) return sh_count_procs_by_regex(proc->name, proc->regexp); #endif return sh_count_procs(proc->name); }
u_char * var_extensible_proc(struct variable *vp, oid * name, size_t * length, int exact, size_t * var_len, WriteMethod ** write_method) { struct myproc *proc; static long long_ret; static char errmsg[300]; if (header_simple_table (vp, name, length, exact, var_len, write_method, numprocs)) return (NULL); if ((proc = get_proc_instance(procwatch, name[*length - 1]))) { switch (vp->magic) { case MIBINDEX: long_ret = name[*length - 1]; return ((u_char *) (&long_ret)); case ERRORNAME: /* process name to check for */ *var_len = strlen(proc->name); return ((u_char *) (proc->name)); case PROCMIN: long_ret = proc->min; return ((u_char *) (&long_ret)); case PROCMAX: long_ret = proc->max; return ((u_char *) (&long_ret)); case PROCCOUNT: long_ret = sh_count_procs(proc->name); return ((u_char *) (&long_ret)); case ERRORFLAG: long_ret = sh_count_procs(proc->name); if (long_ret >= 0 && /* Too few processes running */ ((proc->min && long_ret < proc->min) || /* Too many processes running */ (proc->max && long_ret > proc->max) || /* Processes running that shouldn't be */ (proc->min == 0 && proc->max == 0 && long_ret > 0))) { long_ret = 1; } else { long_ret = 0; } return ((u_char *) (&long_ret)); case ERRORMSG: long_ret = sh_count_procs(proc->name); if (long_ret < 0) { errmsg[0] = 0; /* catch out of mem errors return 0 count */ } else if (proc->min && long_ret < proc->min) { if ( long_ret > 0 ) snprintf(errmsg, sizeof(errmsg), "Too few %s running (# = %d)", proc->name, (int) long_ret); else snprintf(errmsg, sizeof(errmsg), "No %s process running", proc->name); } else if (proc->max && long_ret > proc->max) { snprintf(errmsg, sizeof(errmsg), "Too many %s running (# = %d)", proc->name, (int) long_ret); } else if (proc->min == 0 && proc->max == 0 && long_ret > 0) { snprintf(errmsg, sizeof(errmsg), "%s process should not be running.", proc->name); } else { errmsg[0] = 0; } errmsg[ sizeof(errmsg)-1 ] = 0; *var_len = strlen(errmsg); return ((u_char *) errmsg); case ERRORFIX: *write_method = fixProcError; long_return = fixproc.result; return ((u_char *) & long_return); case ERRORFIXCMD: if (proc->fixcmd) { *var_len = strlen(proc->fixcmd); return (u_char *) proc->fixcmd; } errmsg[0] = 0; *var_len = 0; return ((u_char *) errmsg); } return NULL; } return NULL; }