void doDisable(ControlStruct *p, char *pStr) { char *cp; portConf *pDevc; if ((!Permiscuous && !p->privileged) || (cp = parseRE(p, pStr)) == NULL) return; for (pDevc = pPortList; pDevc != NULL; pDevc = pDevc->pNext) { if (regexec(&p->portRE, pDevc->srvc, 0, NULL, 0) == 0 && (regexec(&p->devcRE, pDevc->dnam, 0, NULL, 0) == 0 || regexec(&p->devcRE, pDevc->devc, 0, NULL, 0) == 0)) { if (p->verbose) fprintf(p->fp, "Disabling port: %s:%s(%s)\n", pDevc->srvc, pDevc->dnam, pDevc->devc); else fprintf(p->fp, "101:%s:%s:%s:Device disabled\n", pDevc->srvc, pDevc->dnam, pDevc->devc); pDevc->enabled = 0; } } }
NodePtr parsePrimitive() { NodePtr p = nullptr; RangeSet st; // lookahead switch (reader.peek()) { case '\\': reader.next(); switch (reader.peek()) { case 'd': st.insert({ '0', '9' }); reader.next(); return std::make_shared<CharsetNode>(st); break; case '{': case '}': case '|': case '(': case ')': case '.': case '+': case '*': case '?': case '\\': case 'n': case 't': return std::make_shared<CharNode>(reader.next()); break; default: throw ParseError(); } reader.next(); break; case '(': reader.next(); p = parseRE(); if (reader.peek() != ')') { throw ParseError(); } reader.next(); return p; case '\0': case '*': case '|': throw ParseError(); break; case '.': reader.next(); return std::make_shared<WildcardNode>(); break; default: return std::make_shared<CharNode>(reader.next()); } }
bool CRegExp::parse(const String *str, SMatches *mtch #ifdef NAMED_MATCHES_IN_HASH ,PMatchHash nmtch #endif ) { end = str->length(); global_pattern = str; #ifdef COLORERMODE schemeStart = 0; #endif matches = mtch; #ifdef NAMED_MATCHES_IN_HASH namedMatches = nmtch; #endif return parseRE(0); };
Parser(typename Encode<E>::PointerType input, Automata& nfa) : reader(input) { nfa.clear(); if (reader.peek() == 0) { return; } auto ast = parseRE(); if (reader.peek() != 0) { throw ParseError(); } State s; State e; ast->convertToNFA(nfa, s, e); nfa.setStart(s); nfa.setTerminate(e); }
bool CRegExp::parse(const String *str, int pos, int eol, SMatches *mtch #ifdef NAMED_MATCHES_IN_HASH , PMatchHash nmtch #endif , int soScheme, int posMoves) { bool nms = positionMoves; if (posMoves != -1) positionMoves = (posMoves != 0); #ifdef COLORERMODE schemeStart = soScheme; #endif global_pattern = str; end = eol; matches = mtch; #ifdef NAMED_MATCHES_IN_HASH namedMatches = nmtch; #endif bool result = parseRE(pos); positionMoves = nms; return result; };
void doDisconnect(ControlStruct *p, char *pStr) { int cnt; char *cp; portConf *pDevc; if ((!Permiscuous && !p->privileged) || (cp = parseRE(p, pStr)) == NULL) return; for (cnt = 0, pDevc = pPortList; pDevc != NULL; pDevc = pDevc->pNext) { if (pDevc->pid > 0 && pDevc->enabled && regexec(&p->portRE, pDevc->srvc, 0, NULL, 0) == 0 && (regexec(&p->devcRE, pDevc->dnam, 0, NULL, 0) == 0 || regexec(&p->devcRE, pDevc->devc, 0, NULL, 0) == 0)) { cnt++; if (p->verbose) fprintf(p->fp, "Disconnecting port: %s:%s(%s)\n", pDevc->srvc, pDevc->dnam, pDevc->devc); else fprintf(p->fp, "102:%s:%s:%s:Port disconnected\n", pDevc->srvc, pDevc->dnam, pDevc->devc); if (dbg) syslog(LOG_DEBUG, "doPrivilege():Sending TERM signal to process %d", pDevc->pid); kill(pDevc->pid, SIGTERM); } } if (cnt == 0) fprintf(p->fp, "No port found\n"); }
void doSet(ControlStruct *p, char *pStr) { int baud, x, b; portConf *pDevc; char tmpBuf[20], *cp, *cp1; if (dbg) syslog(LOG_DEBUG, "doSet():Enter with \"%s\"", pStr); for (x = 0, cp = pStr, cp1 = tmpBuf; *cp != '\0' && !isspace(*cp) && x < 20; x++) { *(cp1++) = tolower(*(cp++)); *cp1 = '\0'; } if (dbg) syslog(LOG_DEBUG, "doSet(): Testing \"%s\" for baud", tmpBuf); if (strcmp(tmpBuf, "baud") == 0) baud = 1; /* else if (strcmp(tmpBuf, "conf")) baud = 0; */ else fputs("Err:Expecting \"baud\"\n", p->fp); if ((cp = parseRE(p, cp)) == NULL) return; if (dbg) syslog(LOG_DEBUG, "doSet(): Setting baud rate to \"%s\"", cp); b = atoi(cp); for (pDevc = pPortList; pDevc != NULL; pDevc = pDevc->pNext) { if (regexec(&p->portRE, pDevc->srvc, 0, NULL, 0) == 0 && (regexec(&p->devcRE, pDevc->dnam, 0, NULL, 0) == 0 || regexec(&p->devcRE, pDevc->devc, 0, NULL, 0) == 0)) { if (baud) { for (x = 0; x < 19; x++) { if (b == baudList[x] && b != 0) break; } if (dbg) syslog(LOG_DEBUG, "doSet(): Setting baud rate index to \"%d\"", x); if (x == 19) { fprintf(p->fp, "Err:Invalid Baudrate (%d, \"%s\") entered!\n", b, cp); return; } pDevc->speed = x; } /* else setPortStr(pDevc, cp); */ if (p->verbose) { char bbuf[128]; sprintf(bbuf, "%d", baudList[pDevc->speed]); fprintf(p->fp, "Setting %s for port: %s:%s(%s) to %s\n", (baud == 1) ? "baud" : "port", pDevc->srvc, pDevc->dnam, pDevc->devc, (baud == 1) ? bbuf : pDevc->srvc); } else { char bbuf[128]; sprintf(bbuf, "%d", baudList[pDevc->speed]); fprintf(p->fp, "%s:%s:%s:%s:New default %s for device:%s\n", (baud == 1) ? "104" : "103", pDevc->srvc, pDevc->dnam, pDevc->devc, (baud == 1) ? "baudrate" : "port", (baud == 1) ? bbuf : pDevc->srvc); } } } }
void doShow(ControlStruct *p, char *pStr) { char *cp, *cp1, tmpBuf[2048]; portConf *pDevc; int status = 0, x, flag, mask; if (dbg) syslog(LOG_DEBUG, "doShow():Enter"); if ((cp = parseRE(p, pStr)) == NULL) return; for (; *cp && isspace(*cp); cp++); memset(tmpBuf, 0, sizeof(tmpBuf)); for (x = 0, cp1 = tmpBuf; *cp != '\0' && !isspace(*cp) && x < 20; x++) { *(cp1++) = tolower(*cp++); *cp1 = '\0'; } if (strcmp(tmpBuf, "status") != 0) status = 0; else status = 1; if (dbg) syslog(LOG_DEBUG, "doShow():%sShowing Status", (status == 0) ? "Not " : ""); for (x = 0, pDevc = pPortList; pDevc != NULL; pDevc = pDevc->pNext) { if (dbg) syslog(LOG_DEBUG, "doShow():Testing port |%s|, devc |%s|", pDevc->srvc, pDevc->devc); if (regexec(&p->portRE, pDevc->srvc, 0, NULL, 0) == 0) { if (dbg) syslog(LOG_DEBUG, "doShow():Port matched!"); } if (regexec(&p->devcRE, pDevc->devc, 0, NULL, 0) == 0) { if (dbg) syslog(LOG_DEBUG, "doShow():Devc matched!"); } if (regexec(&p->portRE, pDevc->srvc, 0, NULL, 0) == 0 && (regexec(&p->devcRE, pDevc->dnam, 0, NULL, 0) == 0 || regexec(&p->devcRE, pDevc->devc, 0, NULL, 0) == 0)) { if (dbg) syslog(LOG_DEBUG, "doShow():Have match!"); if (status == 0) { if (dbg) syslog(LOG_DEBUG, "doShow():Here!"); fprintf(p->fp, "\nName:\t'%s'\tPort:\t'%s'\tDevice:\t'%s'\n", pDevc->dnam, pDevc->srvc, pDevc->devc); fprintf(p->fp, "Baud:\t%d\n", baudList[pDevc->speed]); memset(tmpBuf, '\0', sizeof(tmpBuf)); flag = pDevc->tios.c_iflag; if (flag & IGNBRK) strPut(tmpBuf, sizeof(tmpBuf), "IGNBRK"); if (flag & BRKINT) strPut(tmpBuf, sizeof(tmpBuf), "BRKINT"); if (flag & PARMRK) strPut(tmpBuf, sizeof(tmpBuf), "PARMRK"); if (flag & INPCK) strPut(tmpBuf, sizeof(tmpBuf), "INPCK"); if (flag & ISTRIP) strPut(tmpBuf, sizeof(tmpBuf), "ISTRIP"); if (flag & INLCR) strPut(tmpBuf, sizeof(tmpBuf), "INLCR"); if (flag & IGNCR) strPut(tmpBuf, sizeof(tmpBuf), "IGNCR"); if (flag & ICRNL) strPut(tmpBuf, sizeof(tmpBuf), "ICRNL"); #ifndef FreeBSD if (flag & IUCLC) strPut(tmpBuf, sizeof(tmpBuf), "IUCLC"); #endif /* FreeBSD */ if (flag & IXON) strPut(tmpBuf, sizeof(tmpBuf), "IXON"); if (flag & IXANY) strPut(tmpBuf, sizeof(tmpBuf), "IXANY"); if (flag & IXOFF) strPut(tmpBuf, sizeof(tmpBuf), "IMAXBEL"); if (strlen(tmpBuf)) { fputs("Input flags:\n", p->fp); strcat(tmpBuf, "\n"); fputs(tmpBuf, p->fp); } memset(tmpBuf, '\0', sizeof(tmpBuf)); flag = pDevc->tios.c_oflag; if (flag & OPOST) strPut(tmpBuf, sizeof(tmpBuf), "OPOST"); if (flag & ONLCR) strPut(tmpBuf, sizeof(tmpBuf), "ONLCR"); #ifndef FreeBSD if (flag & OLCUC) strPut(tmpBuf, sizeof(tmpBuf), "OLCUC"); if (flag & OCRNL) strPut(tmpBuf, sizeof(tmpBuf), "OCRNL"); if (flag & ONOCR) strPut(tmpBuf, sizeof(tmpBuf), "ONOCR"); if (flag & ONLRET) strPut(tmpBuf, sizeof(tmpBuf), "ONLRET"); if (flag & OFDEL) strPut(tmpBuf, sizeof(tmpBuf), "OFDEL"); mask = flag & NLDLY; if (mask == NL0) strPut(tmpBuf, sizeof(tmpBuf), "NL0"); else if (mask == NL1) strPut(tmpBuf, sizeof(tmpBuf), "NL1"); mask = flag & CRDLY; if (mask == CR0) strPut(tmpBuf, sizeof(tmpBuf), "CR0"); else if (mask == CR1) strPut(tmpBuf, sizeof(tmpBuf), "CR1"); else if (mask == CR2) strPut(tmpBuf, sizeof(tmpBuf), "CR2"); else if (mask == CR3) strPut(tmpBuf, sizeof(tmpBuf), "CR3"); mask = flag & TABDLY; if (mask == TAB0) strPut(tmpBuf, sizeof(tmpBuf), "TAB0"); else if (mask == TAB1) strPut(tmpBuf, sizeof(tmpBuf), "TAB1"); else if (mask == TAB2) strPut(tmpBuf, sizeof(tmpBuf), "TAB2"); else if (mask == TAB3) strPut(tmpBuf, sizeof(tmpBuf), "TAB3"); #if !defined(OSF) && !defined(AIX) && !defined(SCO) else if (mask == XTABS) strPut(tmpBuf, sizeof(tmpBuf), "XTABS"); #endif mask = flag & BSDLY; if (mask == BS0) strPut(tmpBuf, sizeof(tmpBuf), "BS0"); else if (mask == BS1) strPut(tmpBuf, sizeof(tmpBuf), "BS1"); mask = flag & VTDLY; if (mask == VT0) strPut(tmpBuf, sizeof(tmpBuf), "VT0"); else if (mask == VT1) strPut(tmpBuf, sizeof(tmpBuf), "VT1"); mask = flag & FFDLY; if (mask == FF0) strPut(tmpBuf, sizeof(tmpBuf), "FF0"); else if (mask == FF1) strPut(tmpBuf, sizeof(tmpBuf), "FF1"); if (strlen(tmpBuf)) { fputs("Output flags:\n", p->fp); strcat(tmpBuf, "\n"); fputs(tmpBuf, p->fp); } #endif /* FreeBSD */ memset(tmpBuf, '\0', sizeof(tmpBuf)); flag = pDevc->tios.c_cflag; mask = flag & CSIZE; if (mask == CS5) strPut(tmpBuf, sizeof(tmpBuf), "CS5"); else if (mask == CS6) strPut(tmpBuf, sizeof(tmpBuf), "CS6"); else if (mask == CS7) strPut(tmpBuf, sizeof(tmpBuf), "CS7"); else if (mask == CS8) strPut(tmpBuf, sizeof(tmpBuf), "CS8"); if (flag & CSTOPB) strPut(tmpBuf, sizeof(tmpBuf), "CSTOPB"); if (flag & PARENB) { strPut(tmpBuf, sizeof(tmpBuf), "PARENB"); if (flag & PARODD) strPut(tmpBuf, sizeof(tmpBuf), "PARODD"); } if (flag & HUPCL) strPut(tmpBuf, sizeof(tmpBuf), "HUPCL"); if (flag & CLOCAL) strPut(tmpBuf, sizeof(tmpBuf), "CLOCAL"); #if !defined(AIX) && !defined(SCO) if (flag & CRTSCTS) strPut(tmpBuf, sizeof(tmpBuf), "CRTSCTS"); #endif if (strlen(tmpBuf)) { fputs("Control flags:\n", p->fp); strcat(tmpBuf, "\n"); fputs(tmpBuf, p->fp); } memset(tmpBuf, '\0', sizeof(tmpBuf)); flag = pDevc->tios.c_lflag; if (flag & ISIG) strPut(tmpBuf, sizeof(tmpBuf), "ISIG"); if (flag & ICANON) strPut(tmpBuf, sizeof(tmpBuf), "ICANON"); #ifndef FreeBSD if (flag & XCASE) strPut(tmpBuf, sizeof(tmpBuf), "XCASE"); #endif /* FreeBSD */ if (flag & ECHO) strPut(tmpBuf, sizeof(tmpBuf), "ECHO"); if (flag & ECHOE) strPut(tmpBuf, sizeof(tmpBuf), "ECHOE"); if (flag & ECHOK) strPut(tmpBuf, sizeof(tmpBuf), "ECHOK"); if (flag & ECHONL) strPut(tmpBuf, sizeof(tmpBuf), "ECHONL"); #if !defined(SCO) if (flag & ECHOCTL) strPut(tmpBuf, sizeof(tmpBuf), "ECHOCTL"); if (flag & ECHOPRT) strPut(tmpBuf, sizeof(tmpBuf), "ECHOPRT"); if (flag & ECHOKE) strPut(tmpBuf, sizeof(tmpBuf), "ECHOKE"); if (flag & FLUSHO) strPut(tmpBuf, sizeof(tmpBuf), "FLUSHO"); if (flag & PENDIN) strPut(tmpBuf, sizeof(tmpBuf), "PENDIN"); #endif if (flag & TOSTOP) strPut(tmpBuf, sizeof(tmpBuf), "TOSTOP"); if (strlen(tmpBuf)) { fputs("Local flags:\n", p->fp); strcat(tmpBuf, "\n"); fputs(tmpBuf, p->fp); } fflush(p->fp); } else { if (p->verbose) { if ((x % 20) == 0) { fputs("\n\nName Port Device State IP\n", p->fp); fputs("===================================================================\n", p->fp); } x++; fprintf(p->fp, "%-15s %-8s %-15s %-10s %s\n", pDevc->dnam, pDevc->srvc, pDevc->devc, (pDevc->enabled == 0) ? "Disabled" : (pDevc->pid > 0) ? "In Use" : "Enabled", (pDevc->pid == 0) ? "" : inet_ntoa(pDevc->addr.sin_addr)); } else { fprintf(p->fp, "105:%s:%s:%s:%s:%s\n", pDevc->dnam, pDevc->srvc, pDevc->devc, (pDevc->enabled == 0) ? "Disabled" : (pDevc->pid > 0) ? "In Use" : "Enabled", (pDevc->pid == 0) ? "" : inet_ntoa(pDevc->addr.sin_addr)); } } } } }