int parseConfigLineCheckCommand(char *line, int linelen, const char *cmd, int *vpos) { int cmdlen = strlen(cmd); if(!(linelen >= cmdlen)) { return 0; } if(strncmp(line,cmd,cmdlen) != 0) { return 0; } if(parseConfigIsEOLChar(line[cmdlen])) { *vpos = cmdlen; return 1; } else if(isWhitespaceChar(line[cmdlen])) { *vpos = cmdlen; while(((*vpos)+1) < linelen) { if(!isWhitespaceChar(line[*vpos])) { break; } *vpos = (*vpos)+1; } return 1; } else { return 0; } }
static void parseConfigFile(int fd, struct s_initconfig *cs) { char line[CONFPARSER_LINEBUF_SIZE+1]; char c; int linepos = 0; int linectr = 0; int waiteol = 0; int rc; int readlen; do { readlen = read(fd,&c,1); if(!(readlen > 0)) { c = '\n'; } if(c == '\n') { linectr++; while(linepos > 0) { if(isWhitespaceChar(line[linepos-1])) { linepos--; } else { break; } } line[linepos] = '\0'; rc = parseConfigLine(line,linepos,cs); if(rc < 0) { printf("error: config file parse error at line %d!\n", linectr); throwError(NULL); } if(rc == 0) break; linepos = 0; waiteol = 0; } else { if((!waiteol) && (!(linepos == 0 && isWhitespaceChar(c)))) { if(parseConfigIsEOLChar(c)) { line[linepos] = '\0'; waiteol = 1; } else { if(linepos < (CONFPARSER_LINEBUF_SIZE)) { line[linepos] = c; linepos++; } else { line[linepos] = '\0'; waiteol = 1; } } } } } while(readlen > 0); }
void parseConfigFile(int fd, struct s_initconfig *cs) { char line[CONFPARSER_LINEBUF_SIZE+1]; char c; int linepos = 0; int linectr = 0; int waiteol = 0; int rc; int readlen; strcpy(cs->tapname,""); strcpy(cs->ifconfig4,""); strcpy(cs->ifconfig6,""); strcpy(cs->upcmd,""); strcpy(cs->sourceip,""); strcpy(cs->sourceport,""); strcpy(cs->userstr,""); strcpy(cs->groupstr,""); strcpy(cs->chrootstr,""); strcpy(cs->networkname,"PEERVPN"); strcpy(cs->engines,""); strcpy(cs->pidfile, ""); strcpy(cs->privatekey, "/var/run/peervpn.pem"); cs->password_len = 0; cs->enablepidfile = 0; cs->enableeth = 1; cs->enablendpcache = 0; cs->enablevirtserv = 0; cs->enablerelay = 0; cs->enableindirect = 0; cs->enableconsole = 0; cs->enableseccomp = 0; cs->forceseccomp = 0; cs->daemonize = 0; cs->enableprivdrop = 1; cs->enableipv4 = 1; cs->enableipv6 = 1; cs->enablenat64clat = 0; cs->enablesyslog = 0; cs->sockmark = 0; cs->enablepidfile = 0; cs->initpeerscount = 0; do { readlen = read(fd,&c,1); if(!(readlen > 0)) { c = '\n'; } if(c == '\n') { linectr++; while(linepos > 0) { if(isWhitespaceChar(line[linepos-1])) { linepos--; } else { break; } } line[linepos] = '\0'; rc = parseConfigLine(line,linepos,cs); if(rc < 0) { printf("error: config file parse error at line %d!\n", linectr); throwError(NULL); } if(rc == 0) break; linepos = 0; waiteol = 0; } else { if((!waiteol) && (!(linepos == 0 && isWhitespaceChar(c)))) { if(parseConfigIsEOLChar(c)) { line[linepos] = '\0'; waiteol = 1; } else { if(linepos < (CONFPARSER_LINEBUF_SIZE)) { line[linepos] = c; linepos++; } else { line[linepos] = '\0'; waiteol = 1; } } } } } while(readlen > 0); }