コード例 #1
0
ファイル: config.c プロジェクト: hideman-ltd/peervpn
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;
	}
}
コード例 #2
0
ファイル: config.c プロジェクト: netzverweigerer/peervpn
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);
}
コード例 #3
0
ファイル: config.c プロジェクト: hideman-ltd/peervpn
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);
}