⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 snmptargetaddrentry.c

📁 ucd-snmp源代码
💻 C
📖 第 1 页 / 共 4 页
字号:
  }  /* check Timeout >= 0 */  else if ( (entry->timeout = (int)strtol(cptr, (char **)NULL, 0)) < 0) {    DEBUGMSGTL(("snmpTargetAddrEntry","ERROR snmpTargeParamsEntry: Timeout out of range in config string\n"));    return(0);  }  return(1);}  /* snmpTargetAddr_addTimeout  */    int snmpTargetAddr_addRetryCount(     struct targetAddrTable_struct *entry,     char   *cptr){  if (cptr == 0) {    DEBUGMSGTL(("snmpTargetAddrEntry","ERROR snmpTargetParamsEntry: no Retry Count in config string\n"));    return(0);  }  else if (!(isdigit(*cptr))) {    DEBUGMSGTL(("snmpTargetAddrEntry","ERROR snmpTargeParamsEntry: Retry Count is not a digit in config string\n"));    return(0);  }  /* spec check 0..255 */  else {    entry->retryCount = (int)strtol(cptr, (char **)NULL, 0);    if ( (entry->retryCount < 0) ||	 (entry->retryCount > 255) )  {      DEBUGMSGTL(("snmpTargetAddrEntry","ERROR snmpTargeParamsEntry: Retry Count is out of range in config string\n"));      return(0);    }  }  return(1);}  /* snmpTargetAddr_addRetryCount  */ int snmpTargetAddr_addTagList(     struct targetAddrTable_struct *entry,     char   *cptr){  size_t len;  if (cptr == 0) {    DEBUGMSGTL(("snmpTargetAddrEntry","ERROR snmpTargetAddrEntry: no tag list in config string\n"));    return(0);  }  else {    len = strlen(cptr);        /* spec check for string 0-255 */    if (len < 0 || len > 255)  {      DEBUGMSGTL(("snmpTargetAddrEntry","ERROR snmpTargetAddrEntry: tag list out of range in config string\n"));      return(0);    }     SNMP_FREE(entry->tagList);    entry->tagList = (char *)malloc(len + 1);    strncpy(entry->tagList, cptr, len);    entry->tagList[len] = '\0';  }  return(1);} /* snmpTargetAddr_addTagList */   int snmpTargetAddr_addParams(     struct targetAddrTable_struct *entry,     char   *cptr){  size_t len;  if (cptr == 0) {    DEBUGMSGTL(("snmpTargetAddrEntry","ERROR snmpTargetAddrEntry: no params in config string\n"));    return(0);  }  else {    len = strlen(cptr);        /* spec check for string 1-32 */    if (len < 1 || len > 32)  {      DEBUGMSGTL(("snmpTargetAddrEntry","ERROR snmpTargetAddrEntry: params out of range in config string\n"));      return(0);    }     entry->params = (char *)malloc(len + 1);    strncpy(entry->params, cptr, len);    entry->params[len] = '\0';  }  return(1);} /* snmpTargetAddr_addParams */  int snmpTargetAddr_addStorageType(     struct targetAddrTable_struct *entry,     char   *cptr){  char   buff[1024];  if (cptr == 0) {    DEBUGMSGTL(("snmpTargetAddrEntry","ERROR snmpTargetAddrEntry: no storage type in config string\n"));    return(0);  }  else if (!(isdigit(*cptr))) {    DEBUGMSGTL(("snmpTargetAddrEntry","ERROR snmpTargetAddrEntry: storage type is not a digit in config string\n"));    return(0);  }  /* check that storage type is a possible value */  else if ( ((entry->storageType = (int)strtol(cptr, (char **)NULL, 0)) 	     != SNMP_STORAGE_OTHER) &&	    (entry->storageType != SNMP_STORAGE_VOLATILE) && 	    (entry->storageType != SNMP_STORAGE_NONVOLATILE)  &&	    (entry->storageType != SNMP_STORAGE_PERMANENT) && 	    (entry->storageType != SNMP_STORAGE_READONLY) )  {    sprintf(buff,"ERROR snmpTargetAddrEntry: storage type not a valid value of other(%d), volatile(%d), nonvolatile(%d), permanent(%d), or readonly(%d) in config string.\n", SNMP_STORAGE_OTHER, SNMP_STORAGE_VOLATILE, SNMP_STORAGE_NONVOLATILE, SNMP_STORAGE_PERMANENT, SNMP_STORAGE_READONLY);    DEBUGMSGTL(("snmpTargetAddrEntry", buff));    return(0);  }  return(1);}  /* snmpTargetAddr_addStorageType */    int snmpTargetAddr_addRowStatus(     struct targetAddrTable_struct *entry,     char   *cptr){  char buff[1024];  if (cptr == 0) {    DEBUGMSGTL(("snmpTargetAddrEntry","ERROR snmpTargetAddrEntry: no Row Status in config string\n"));    return(0);  }  else if (!(isdigit(*cptr))) {    DEBUGMSGTL(("snmpTargetAddrEntry","ERROR snmpTargetAddrEntry: Row Status is not a digit in config string\n"));    return(0);  }  /* check that row status is a valid value */  else if ( ((entry->rowStatus = (int)strtol(cptr, (char **)NULL, 0)) 	     != SNMP_ROW_ACTIVE) &&	    (entry->rowStatus != SNMP_ROW_NOTINSERVICE) &&	    (entry->rowStatus != SNMP_ROW_NOTREADY) ) {    sprintf(buff, "ERROR snmpTargetAddrEntry: Row Status is not a valid value of active(%d), notinservice(%d), or notready(%d) in config string.\n", SNMP_ROW_ACTIVE, SNMP_ROW_NOTINSERVICE, SNMP_ROW_NOTREADY);    DEBUGMSGTL(("snmpTargetAddrEntry", buff));        return(0);  }  return(1);}  /* snmpTargetAddr_addRowStatus  */void snmpd_parse_config_targetAddr(const char *token, char *char_ptr){  char  *cptr = char_ptr, buff[1024];  struct targetAddrTable_struct *newEntry;  int                            i;  newEntry = snmpTargetAddrTable_create();    cptr = copy_word(cptr, buff);  if (snmpTargetAddr_addName(newEntry, buff) == 0) {    snmpTargetAddrTable_dispose(newEntry);    return;  }  cptr = copy_word(cptr, buff);  if (snmpTargetAddr_addTDomain(newEntry, buff) == 0) {    snmpTargetAddrTable_dispose(newEntry);    return;  }  cptr = read_config_read_octet_string(cptr, (u_char **)&newEntry->tAddress,                                       &newEntry->tAddressLen);  if (!cptr || !(newEntry->tAddress)) {      DEBUGMSGTL(("snmpTargetAddrEntry","ERROR snmpTargetAddrEntry: no TAddress in config string\n"));    snmpTargetAddrTable_dispose(newEntry);    return;  }  cptr = copy_word(cptr, buff);  if (snmpTargetAddr_addTimeout(newEntry, buff) == 0) {    snmpTargetAddrTable_dispose(newEntry);    return;  }  cptr = copy_word(cptr, buff);  if (snmpTargetAddr_addRetryCount(newEntry, buff) == 0) {    snmpTargetAddrTable_dispose(newEntry);    return;  }  cptr = copy_word(cptr, buff);  if (snmpTargetAddr_addTagList(newEntry, buff) == 0) {    snmpTargetAddrTable_dispose(newEntry);    return;  }  cptr = copy_word(cptr, buff);  if (snmpTargetAddr_addParams(newEntry, buff) == 0) {    snmpTargetAddrTable_dispose(newEntry);    return;  }  cptr = copy_word(cptr, buff);  if (snmpTargetAddr_addStorageType(newEntry, buff) == 0) {    snmpTargetAddrTable_dispose(newEntry);    return;  }  cptr = copy_word(cptr, buff);  if (snmpTargetAddr_addRowStatus(newEntry, buff) == 0) {    snmpTargetAddrTable_dispose(newEntry);    return;  }  sprintf(buff, "snmp_parse_config_targetAddr, read: %s\n",		   newEntry->name);  for(i=0;i<newEntry->tDomainLen;i++) {    sprintf(&buff[strlen(buff)], ".%d", (int)newEntry->tDomain[i]);  }  sprintf(&buff[strlen(buff)], " %s %d %d %s %s %d %d\n",	  newEntry->tAddress, newEntry->timeout, newEntry->retryCount,	  newEntry->tagList,  newEntry->params,  newEntry->storageType, 	  newEntry->rowStatus);  DEBUGMSGTL(("snmpTargetAddrEntry", buff));  snmpTargetAddrTable_addToList(newEntry, &aAddrTable);} /* snmpd_parse_config_target *//* Shutdown routines *//* store_snmpTargetAddrEntry handles the persistent storage proccess    for this MIB table. It writes out all the non-volatile rows    to permanent storage on a shutdown  */int store_snmpTargetAddrEntry(int majorID, int minorID, void *serverarg,                          void *clientarg){  struct targetAddrTable_struct *curr_struct;  char line[1024];  int  i;  if ( (curr_struct = aAddrTable) != 0) {    while (curr_struct != 0) {      if ( (curr_struct->storageType == SNMP_STORAGE_NONVOLATILE || 	    curr_struct->storageType == SNMP_STORAGE_PERMANENT) 	   &&	   (curr_struct->rowStatus == SNMP_ROW_ACTIVE ||	    curr_struct->rowStatus == SNMP_ROW_NOTINSERVICE) ) {	sprintf(line, "targetAddr %s ", curr_struct->name);	for(i=0; i < curr_struct->tDomainLen; i++) {	  sprintf(&line[strlen(line)], ".%i", (int)curr_struct->tDomain[i]);	}        sprintf(&line[strlen(line)], " ");        read_config_save_octet_string(&line[strlen(line)],                                      curr_struct->tAddress,                                      curr_struct->tAddressLen);	sprintf(&line[strlen(line)], " %i %i \"%s\" %s %i %i", 			 curr_struct->timeout, 			 curr_struct->retryCount,  curr_struct->tagList,			 curr_struct->params,      curr_struct->storageType, 			 curr_struct->rowStatus);		/* store to file */	snmpd_store_config(line);      }      curr_struct = curr_struct->next;    }  }  return SNMPERR_SUCCESS;}  /*  store_snmpTargetAddrEntry  *//*MIB table access routines */u_char *var_snmpTargetAddrEntry(    struct variable *vp,    oid     *name,    size_t  *length,    int     exact,    size_t  *var_len,    WriteMethod **write_method){  /* variables we may use later */  static long                    long_ret;  static char                    string[1500];  static oid                     objid[128];  struct targetAddrTable_struct *temp_struct;  int                            i=0;  /*  Set up write_method first, in case we return NULL before getting to the      switch (vp->magic) below.  In some of these cases, we still want to call      the appropriate write_method, if only to have it return the appropriate      error.  */  switch (vp->magic) {  case SNMPTARGETADDRTDOMAIN:    *write_method = write_snmpTargetAddrTDomain;    break;  case SNMPTARGETADDRTADDRESS:    *write_method = write_snmpTargetAddrTAddress;    break;  case SNMPTARGETADDRRETRYCOUNT:    *write_method = write_snmpTargetAddrRetryCount;    break;  case SNMPTARGETADDRTAGLIST:    *write_method = write_snmpTargetAddrTagList;    break;  case SNMPTARGETADDRPARAMS:    *write_method = write_snmpTargetAddrParams;    break;  case SNMPTARGETADDRSTORAGETYPE:    *write_method = write_snmpTargetAddrStorageType;    break;  case SNMPTARGETADDRROWSTATUS:    *write_method = write_snmpTargetAddrRowStatus;    break;  default:    *write_method = NULL;  }    *var_len = sizeof(long_ret); /* assume an integer and change later if not */  /* look for OID in current table */  if ( (temp_struct = search_snmpTargetAddrTable(vp->name, vp->namelen, 				      name, length, exact)) == 0 ) {    return(0);  }    /* We found what we were looking for, either the next OID or the exact OID */  /* this is where we do the value assignments for the mib results. */  switch(vp->magic) {  case SNMPTARGETADDRTDOMAIN:    if (temp_struct->tDomainLen <= 0) {      return(0);    }    else {      for (i=0;i<temp_struct->tDomainLen;i++) {	objid[i] = temp_struct->tDomain[i];      }      *var_len = temp_struct->tDomainLen * sizeof(oid);    }    return (unsigned char *) objid;      case SNMPTARGETADDRTADDRESS:    if (temp_struct->tAddress == 0)  return(0);    *var_len = temp_struct->tAddressLen;    return (unsigned char *) temp_struct->tAddress;      case SNMPTARGETADDRTIMEOUT:    long_ret = temp_struct->timeout;    return (unsigned char *) &long_ret;  case SNMPTARGETADDRRETRYCOUNT:    long_ret = temp_struct->retryCount;    return (unsigned char *) &long_ret;  case SNMPTARGETADDRTAGLIST:    if (temp_struct->tagList != NULL) {	strcpy(string, temp_struct->tagList);	*var_len = strlen(string);	return (unsigned char *) string;    } else {	return NULL;    }  case SNMPTARGETADDRPARAMS:    if (temp_struct->params == 0) return(0);    strcpy(string, temp_struct->params);    *var_len = strlen(string);    return (unsigned char *) string;      case SNMPTARGETADDRSTORAGETYPE:    long_ret = temp_struct->storageType;    return (unsigned char *) &long_ret;  case SNMPTARGETADDRROWSTATUS:    long_ret = temp_struct->rowStatus;    return (unsigned char *) &long_ret;      default:    DEBUGMSGTL(("snmpd", "unknown sub-id %d in var_snmpTargetAddrEntry\n", vp->magic));  }  return 0;}  /* var_snmpTargetAddrEntry */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -