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

📄 snmptargetaddrentry.c

📁 Snmp(简单网管协议)软件包。
💻 C
📖 第 1 页 / 共 3 页
字号:
    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;  *write_method = 0;           /* assume it isnt writable for the time being */  *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 ) {    /* for creation of new rows */    if (vp->magic == SNMPTARGETADDRROWSTATUS)  {      *write_method = write_snmpTargetAddrRowStatus;    }    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:    *write_method = write_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:    *write_method = write_snmpTargetAddrTAddress;    if (temp_struct->tAddress == 0)  return(0);    *var_len = temp_struct->tAddressLen;    return (unsigned char *) temp_struct->tAddress;      case SNMPTARGETADDRTIMEOUT:    *write_method = write_snmpTargetAddrTimeout;    long_ret = temp_struct->timeout;    return (unsigned char *) &long_ret;  case SNMPTARGETADDRRETRYCOUNT:    *write_method = write_snmpTargetAddrRetryCount;    long_ret = temp_struct->retryCount;    return (unsigned char *) &long_ret;  case SNMPTARGETADDRTAGLIST:    *write_method = write_snmpTargetAddrTagList;    strcpy(string, temp_struct->tagList);    *var_len = strlen(string);    return (unsigned char *) string;  case SNMPTARGETADDRPARAMS:    *write_method = write_snmpTargetAddrParams;    if (temp_struct->params == 0) return(0);    strcpy(string, temp_struct->params);    *var_len = strlen(string);    return (unsigned char *) string;      case SNMPTARGETADDRSTORAGETYPE:    *write_method = write_snmpTargetAddrStorageType;    long_ret = temp_struct->storageType;    return (unsigned char *) &long_ret;  case SNMPTARGETADDRROWSTATUS:    *write_method = write_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 */intwrite_snmpTargetAddrTDomain(   int      action,   u_char   *var_val,   u_char   var_val_type,   size_t   var_val_len,   u_char   *statP,   oid      *name,   size_t   name_len){  size_t                         objSize=128;  int                            i;  struct targetAddrTable_struct *temp_struct;  static oid                    objid[MAX_OID_LEN];  if (var_val_type != ASN_OBJECT_ID) {    DEBUGMSGTL(("snmpTargetAddrEntry","write to snmpTargetAddrTDomain not ASN_OBJECT_ID\n"));    return SNMP_ERR_WRONGTYPE;  }  if (var_val_len > 128) {    DEBUGMSGTL(("snmpTargetAddrEntry","write to snmpTargetAddrTDomain: bad length\n"));    return SNMP_ERR_WRONGLENGTH;  }  /* spec check, ??? */  objSize = var_val_len/sizeof(oid);  memcpy(objid, var_val, var_val_len);    snmpTargetAddrOID[snmpTargetAddrOIDLen-1] = SNMPTARGETADDRTDOMAINCOLUMN;  if ( (temp_struct = search_snmpTargetAddrTable(snmpTargetAddrOID, 						 snmpTargetAddrOIDLen,						 name, &name_len, 1)) == 0) {    DEBUGMSGTL(("snmpTargetAddrEntry","write to snmpTargetAddrTDomain : BAD OID!\n"));    return SNMP_ERR_NOSUCHNAME;  }  /* row exists, check if it is changeable */  if (temp_struct->storageType == SNMP_STORAGE_READONLY) {    DEBUGMSGTL(("snmpTargetAddrEntry","write to snmpTargetAddrTDomain : row is read only\n"));    return SNMP_ERR_NOTWRITABLE;  }  /* check if row active */  if (temp_struct->rowStatus == SNMP_ROW_ACTIVE) {    DEBUGMSGTL(("snmpTargetAddrEntry","write to snmpTargetAddrTDomains : This change not allowed in active row.\n"));    return SNMP_ERR_INCONSISTENTVALUE;  }  /* Finally, we're golden, check if we should save value */  if (action == COMMIT)  {        for (i=0;i < (int)objSize; i++)       temp_struct->tDomain[i] = objid[i];    temp_struct->tDomainLen = objSize;    /* If row is new, check if its status can be updated */    if ( (temp_struct->rowStatus == SNMP_ROW_NOTREADY) &&	 (snmpTargetAddr_rowStatusCheck(temp_struct) != 0) )      temp_struct->rowStatus = SNMP_ROW_NOTINSERVICE;  }  return SNMP_ERR_NOERROR;}  /* write_snmpTargetAddrTDomain */intwrite_snmpTargetAddrTAddress(   int action,   u_char   *var_val,   u_char   var_val_type,   size_t   var_val_len,   u_char   *statP,   oid      *name,   size_t   name_len){  struct targetAddrTable_struct *temp_struct;  if (var_val_type != ASN_OCTET_STR) {      DEBUGMSGTL(("snmpTargetAddrEntry","write to snmpTargetAddrTAddress not ASN_OCTET_STR\n"));      return SNMP_ERR_WRONGTYPE;  }  snmpTargetAddrOID[snmpTargetAddrOIDLen-1] = SNMPTARGETADDRTADDRESSCOLUMN;  if ( (temp_struct = search_snmpTargetAddrTable(snmpTargetAddrOID, 						 snmpTargetAddrOIDLen,						 name, &name_len, 1)) == 0) {    DEBUGMSGTL(("snmpTargetAddrEntry","write to snmpTargetAddrTAddress : BAD OID!\n"));    return SNMP_ERR_NOSUCHNAME;  }  /* row exists, check if it is changeable */  if (temp_struct->storageType == SNMP_STORAGE_READONLY) {    DEBUGMSGTL(("snmpTargetAddrEntry","write to snmpTargetAddrTAddress : row is read only\n"));    return SNMP_ERR_NOTWRITABLE;  }  /* check if row active */  if (temp_struct->rowStatus == SNMP_ROW_ACTIVE) {    DEBUGMSGTL(("snmpTargetAddrEntry","write to snmpTargetAddrTAddress : This change not allowed in active row.\n"));    return SNMP_ERR_INCONSISTENTVALUE;  }    /* Finally, we're golden, check if we should save value */  if (action == COMMIT)  {        SNMP_FREE(temp_struct->tAddress);    temp_struct->tAddress = (u_char *)malloc(var_val_len);    temp_struct->tAddressLen = var_val_len;    memcpy(temp_struct->tAddress, var_val, var_val_len);        /* If row is new, check if its status can be updated */    if ( (temp_struct->rowStatus == SNMP_ROW_NOTREADY) &&	 (snmpTargetAddr_rowStatusCheck(temp_struct) != 0) )      temp_struct->rowStatus = SNMP_ROW_NOTINSERVICE;  }  return SNMP_ERR_NOERROR;}  /* write_snmpTargetAddrTAddress */intwrite_snmpTargetAddrTimeout(

⌨️ 快捷键说明

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