Ejemplo n.º 1
0
std::string SNMPObject::getSyntaxAsString() const {
	static char * _syntaxStrMap[12] = {
		"Integer",
		"Octets",
		"Opaque",
		"Bits",
		"Counter64",
		"Counter32",
		"Gauge32",
		"UnsignedInteger32",
		"TimeTicks",
		"ObjectIdentifier",
		"IPAddr",
		"Null" };
	return _syntaxStrMap[getSyntax()];
}
Ejemplo n.º 2
0
static int
parseSelect(char *resReq, struct resVal *resVal, struct lsInfo *lsInfo, bool_t parseXor, int options)
{
    static char fname[] = "parseSelect";
    int cc;
    enum syntaxType syntax;
    char *expr, *countPtr;
    int i, numXorExprs;
    struct resVal tmpResVal;
    char *resReq2 = NULL;

    if (logclass & (LC_TRACE | LC_SCHED))
        ls_syslog(LOG_DEBUG3, "%s: resReq=%s", fname, resReq);



    if (parseXor && resReq[0] != '\0') {

	countPtr = (char *)malloc(strlen(resReq)+1);
	if (countPtr == NULL) {
	    return(PARSE_BAD_MEM);
	}
	strcpy(countPtr, resReq);
	expr = strtok(countPtr, ",");
	if (expr == NULL) {

	    numXorExprs = 0;
	} else {
	    numXorExprs = 1;

	    while (strtok(NULL, ",")) {
	        numXorExprs++;
            }
	}
	free(countPtr);

	if (logclass & (LC_TRACE |LC_SCHED))
	    ls_syslog(LOG_DEBUG3,"%s: numXorExprs = %d", fname, numXorExprs);


        if (numXorExprs > 1) {

	    resVal->xorExprs =
		(char **)calloc(numXorExprs + 1, sizeof(char*));
	    if (resVal->xorExprs == NULL)
		return(PARSE_BAD_MEM);


            resReq2 = (char *)malloc(strlen(resReq) + numXorExprs * 4 - 1);
	    if ( resReq2== NULL)
		return (PARSE_BAD_MEM);
	    resReq2[0] = '\0';
	    expr = strtok(resReq, ",");
	    for ( i =0 ; i < numXorExprs; i++) {
		initResVal(&tmpResVal);

		ALLOC_STRING(tmpResVal.selectStr, tmpResVal.selectStrSize,
                             MAX(3*strlen(expr) + 1, MAXLINELEN + MAXLSFNAMELEN));

    		if (tmpResVal.selectStr == NULL) {
		    FREEUP(resReq2);
        	    return PARSE_BAD_MEM;
		}
		if (setDefaults(&tmpResVal, lsInfo, options) < 0) {
		    FREEUP(resReq2);
		    return (PARSE_BAD_MEM);
		}
		if ((cc = parseSelect(expr, &tmpResVal, lsInfo, FALSE, options)) != PARSE_OK) {
		    for (i--;i>=0; i--) {
			FREEUP(resVal->xorExprs[i]);
		    }
		    FREEUP(resReq2);
		    return cc;
                }
                resVal->xorExprs[i] =
		    (char *)calloc(strlen(tmpResVal.selectStr) + 1,
				   sizeof(char));
		if (resVal->xorExprs[i] == NULL)
		    return (PARSE_BAD_MEM);

		strcpy(resVal->xorExprs[i], tmpResVal.selectStr);
		if (logclass & (LC_TRACE | LC_SCHED))
		    ls_syslog(LOG_DEBUG3,"%s: xorExprs[%d] = %s", fname, i, resVal->xorExprs[i]);
                if (i == 0 ) {
                    sprintf(resReq2, "(%s)", expr);
		} else {
                    sprintf(resReq2, "%s||(%s)", resReq2, expr);
		}
		freeResVal(&tmpResVal);
		expr = strtok(NULL, ",");
	    }
	    resVal->xorExprs[i] = NULL;
	    if (logclass & (LC_TRACE | LC_SCHED))
		ls_syslog(LOG_DEBUG3,"%s: new selectStr=%s", fname, resReq2);
            resReq = resReq2;
	} else {
	    if (numXorExprs == 1) {

		if (strchr(resReq,',')) {
	            return(PARSE_BAD_EXP);
		}
	    } else {

	        return(PARSE_BAD_EXP);
	    }
	}
    }

    syntax = getSyntax(resReq);
    switch(syntax) {
        case OLD:
            if ((cc =resToClassOld(resReq, resVal, lsInfo)) != PARSE_OK) {
                resVal->selectStr[0] = '\0';
                FREEUP(resReq2);
                return cc;
            }
            break;
        case NEW:
            if ((cc =resToClassNew(resReq, resVal, lsInfo)) != PARSE_OK) {
                resVal->selectStr[0] = '\0';
                FREEUP(resReq2);
                return cc;
            }
            break;
        case EITHER:
            if ((cc =resToClassOld(resReq, resVal, lsInfo)) != PARSE_OK)  {

                if (cc == PARSE_BAD_NAME || cc == PARSE_BAD_VAL) {
                    resVal->selectStr[0] = '\0';
                    FREEUP(resReq2);
                    return cc;
                }
                if ( (cc =resToClassNew(resReq, resVal, lsInfo)) != PARSE_OK) {
                    resVal->selectStr[0] = '\0';
                    FREEUP(resReq2);
                    return cc;
                }
            }
            break;
        default:
            FREEUP(resReq2);
            return PARSE_BAD_EXP;
    }

    FREEUP(resReq2);
    return PARSE_OK;

}
Ejemplo n.º 3
0
	bool isSameSyntax(const Index &other) const {
		return getSyntax() == other.getSyntax();
	}