wg: allow in-line comments
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
		
							parent
							
								
									cc8a25e2f6
								
							
						
					
					
						commit
						437116f238
					
				| @ -29,8 +29,9 @@ reset_peer_section() { | ||||
| 
 | ||||
| reset_peer_section | ||||
| while read -r line || [[ -n $line ]]; do | ||||
| 	key="${line%%=*}"; key="${key##*([[:space:]])}"; key="${key%%*([[:space:]])}" | ||||
| 	value="${line#*=}"; value="${value##*([[:space:]])}"; value="${value%%*([[:space:]])}" | ||||
| 	stripped="${line%%\#*}" | ||||
| 	key="${stripped%%=*}"; key="${key##*([[:space:]])}"; key="${key%%*([[:space:]])}" | ||||
| 	value="${stripped#*=}"; value="${value##*([[:space:]])}"; value="${value%%*([[:space:]])}" | ||||
| 	[[ $key == "["* ]] && { process_peer; reset_peer_section; } | ||||
| 	[[ $key == "[Peer]" ]] && PEER_SECTION=1 | ||||
| 	if [[ $PEER_SECTION -eq 1 ]]; then | ||||
|  | ||||
							
								
								
									
										17
									
								
								src/config.c
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								src/config.c
									
									
									
									
									
								
							| @ -417,25 +417,30 @@ error: | ||||
| 
 | ||||
| bool config_read_line(struct config_ctx *ctx, const char *input) | ||||
| { | ||||
| 	size_t len = strlen(input), cleaned_len = 0; | ||||
| 	char *line = calloc(len + 1, sizeof(char)); | ||||
| 	size_t len, cleaned_len = 0; | ||||
| 	char *line, *comment; | ||||
| 	bool ret = true; | ||||
| 
 | ||||
| 	/* This is what strchrnull is for, but that isn't portable. */ | ||||
| 	comment = strchr(input, COMMENT_CHAR); | ||||
| 	if (comment) | ||||
| 		len = comment - input; | ||||
| 	else | ||||
| 		len = strlen(input); | ||||
| 
 | ||||
| 	line = calloc(len + 1, sizeof(char)); | ||||
| 	if (!line) { | ||||
| 		perror("calloc"); | ||||
| 		ret = false; | ||||
| 		goto out; | ||||
| 	} | ||||
| 	if (!len) | ||||
| 		goto out; | ||||
| 
 | ||||
| 	for (size_t i = 0; i < len; ++i) { | ||||
| 		if (!isspace(input[i])) | ||||
| 			line[cleaned_len++] = input[i]; | ||||
| 	} | ||||
| 	if (!cleaned_len) | ||||
| 		goto out; | ||||
| 	if (line[0] == COMMENT_CHAR) | ||||
| 		goto out; | ||||
| 	ret = process_line(ctx, line); | ||||
| out: | ||||
| 	free(line); | ||||
|  | ||||
| @ -27,7 +27,7 @@ PROGRAM="${0##*/}" | ||||
| ARGS=( "$@" ) | ||||
| 
 | ||||
| parse_options() { | ||||
| 	local interface_section=0 line key value | ||||
| 	local interface_section=0 line key value stripped | ||||
| 	CONFIG_FILE="$1" | ||||
| 	[[ $CONFIG_FILE =~ ^[a-zA-Z0-9_=+.-]{1,15}$ ]] && CONFIG_FILE="/etc/wireguard/$CONFIG_FILE.conf" | ||||
| 	[[ -e $CONFIG_FILE ]] || die "\`$CONFIG_FILE' does not exist" | ||||
| @ -37,8 +37,9 @@ parse_options() { | ||||
| 	INTERFACE="${BASH_REMATCH[2]}" | ||||
| 	shopt -s nocasematch | ||||
| 	while read -r line || [[ -n $line ]]; do | ||||
| 		key="${line%%=*}"; key="${key##*([[:space:]])}"; key="${key%%*([[:space:]])}" | ||||
| 		value="${line#*=}"; value="${value##*([[:space:]])}"; value="${value%%*([[:space:]])}" | ||||
| 		stripped="${line%%\#*}" | ||||
| 		key="${stripped%%=*}"; key="${key##*([[:space:]])}"; key="${key%%*([[:space:]])}" | ||||
| 		value="${stripped#*=}"; value="${value##*([[:space:]])}"; value="${value%%*([[:space:]])}" | ||||
| 		[[ $key == "["* ]] && interface_section=0 | ||||
| 		[[ $key == "[Interface]" ]] && interface_section=1 | ||||
| 		if [[ $interface_section -eq 1 ]]; then | ||||
|  | ||||
							
								
								
									
										4
									
								
								src/wg.8
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								src/wg.8
									
									
									
									
									
								
							| @ -165,8 +165,8 @@ when unspecified, this option is off. Most users will not need this. Optional. | ||||
| 
 | ||||
| .SH CONFIGURATION FILE FORMAT EXAMPLE | ||||
| This example may be used as a model for writing configuration files, following an | ||||
| INI-like syntax. Lines that start with a '#' are considered comments and are thus | ||||
| ignored. | ||||
| INI-like syntax. Characters after and including a '#' are considered comments and | ||||
| are thus ignored. | ||||
| 
 | ||||
|     [Interface] | ||||
| .br | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Jason A. Donenfeld
						Jason A. Donenfeld