|  | @@ -46,6 +46,16 @@ keyserver_variables=(ONION_ONLY
 | 
	
		
			
			| 46 | 46 |                       KEYSERVER_DOMAIN_NAME
 | 
	
		
			
			| 47 | 47 |                       KEYSERVER_CODE)
 | 
	
		
			
			| 48 | 48 |  
 | 
	
		
			
			|  | 49 | +function check_keyserver_directory_size {
 | 
	
		
			
			|  | 50 | +    dirsize=$(du /var/lib/sks/DB | awk -F ' ' '{print $1}')
 | 
	
		
			
			|  | 51 | +    # 500M
 | 
	
		
			
			|  | 52 | +    if [ $dirsize -gt 500000 ]; then
 | 
	
		
			
			|  | 53 | +        echo "1"
 | 
	
		
			
			|  | 54 | +        return
 | 
	
		
			
			|  | 55 | +    fi
 | 
	
		
			
			|  | 56 | +    echo "0"
 | 
	
		
			
			|  | 57 | +}
 | 
	
		
			
			|  | 58 | +
 | 
	
		
			
			| 49 | 59 |  function configure_firewall_for_keyserver {
 | 
	
		
			
			| 50 | 60 |      if [[ $ONION_ONLY != "no" ]]; then
 | 
	
		
			
			| 51 | 61 |          return
 | 
	
	
		
			
			|  | @@ -115,6 +125,10 @@ function upgrade_keyserver {
 | 
	
		
			
			| 115 | 125 |  }
 | 
	
		
			
			| 116 | 126 |  
 | 
	
		
			
			| 117 | 127 |  function backup_local_keyserver {
 | 
	
		
			
			|  | 128 | +    if [[ "$(check_keyserver_directory_size)" != "0" ]]; then
 | 
	
		
			
			|  | 129 | +        echo $'WARNING: Keyserver database size is too large to backup'
 | 
	
		
			
			|  | 130 | +        return
 | 
	
		
			
			|  | 131 | +    fi
 | 
	
		
			
			| 118 | 132 |      source_directory=/var/lib/sks/DB
 | 
	
		
			
			| 119 | 133 |      if [ -d $source_directory ]; then
 | 
	
		
			
			| 120 | 134 |          systemctl stop sks
 | 
	
	
		
			
			|  | @@ -158,6 +172,10 @@ function restore_local_keyserver {
 | 
	
		
			
			| 158 | 172 |  }
 | 
	
		
			
			| 159 | 173 |  
 | 
	
		
			
			| 160 | 174 |  function backup_remote_keyserver {
 | 
	
		
			
			|  | 175 | +    if [[ "$(check_keyserver_directory_size)" != "0" ]]; then
 | 
	
		
			
			|  | 176 | +        echo $'WARNING: Keyserver database size is too large to backup'
 | 
	
		
			
			|  | 177 | +        return
 | 
	
		
			
			|  | 178 | +    fi
 | 
	
		
			
			| 161 | 179 |      source_directory=/var/lib/sks/DB
 | 
	
		
			
			| 162 | 180 |      if [ -d $source_directory ]; then
 | 
	
		
			
			| 163 | 181 |          systemctl stop sks
 | 
	
	
		
			
			|  | @@ -247,7 +265,23 @@ function install_interactive_keyserver {
 | 
	
		
			
			| 247 | 265 |      APP_INSTALLED=1
 | 
	
		
			
			| 248 | 266 |  }
 | 
	
		
			
			| 249 | 267 |  
 | 
	
		
			
			|  | 268 | +function keyserver_create_membership {
 | 
	
		
			
			|  | 269 | +    if [ -f /etc/sks/membership ]; then
 | 
	
		
			
			|  | 270 | +        return
 | 
	
		
			
			|  | 271 | +    fi
 | 
	
		
			
			|  | 272 | +    systemctl stop sks
 | 
	
		
			
			|  | 273 | +    echo $"# List of other $PROJECT_NAME SKS Keyservers to sync with." > /etc/sks/membership
 | 
	
		
			
			|  | 274 | +    echo '#' >> /etc/sks/membership
 | 
	
		
			
			|  | 275 | +    echo $"# Don't add major keyservers here, because it will take an" >> /etc/sks/membership
 | 
	
		
			
			|  | 276 | +    echo $'# Infeasible amount of time to sync and backups will become' >> /etc/sks/membership
 | 
	
		
			
			|  | 277 | +    echo $'# absurdly long and probably break your system. You have been warned.' >> /etc/sks/membership
 | 
	
		
			
			|  | 278 | +    echo '' >> /etc/sks/membership
 | 
	
		
			
			|  | 279 | +    chown -Rc debian-sks: /etc/sks/membership
 | 
	
		
			
			|  | 280 | +    systemctl start sks
 | 
	
		
			
			|  | 281 | +}
 | 
	
		
			
			|  | 282 | +
 | 
	
		
			
			| 250 | 283 |  function keyserver_import_keys {
 | 
	
		
			
			|  | 284 | +    # NOTE: this function isn't used, but kept for reference
 | 
	
		
			
			| 251 | 285 |      dialog --title $"Import public keys database" \
 | 
	
		
			
			| 252 | 286 |             --backtitle $"Freedombone Control Panel" \
 | 
	
		
			
			| 253 | 287 |             --defaultno \
 | 
	
	
		
			
			|  | @@ -277,7 +311,7 @@ function keyserver_sync {
 | 
	
		
			
			| 277 | 311 |      trap "rm -f $data" 0 1 2 5 15
 | 
	
		
			
			| 278 | 312 |      dialog --backtitle $"Freedombone Control Panel" \
 | 
	
		
			
			| 279 | 313 |             --title $"Sync with other keyserver" \
 | 
	
		
			
			| 280 |  | -           --form "\nDetails for the other server:" 10 50 3 \
 | 
	
		
			
			|  | 314 | +           --form $"\nEnter details for the other server. Please be aware that it's not a good idea to sync with major keyservers which have exceptionally large databases. This is intended to sync with other $PROJECT_NAME systems each having a small database for a particular community." 15 60 2 \
 | 
	
		
			
			| 281 | 315 |             $"Domain:" 1 1 "" 1 18 32 32 \
 | 
	
		
			
			| 282 | 316 |             $"Port:" 2 1 "11370" 2 18 8 8 \
 | 
	
		
			
			| 283 | 317 |             2> $data
 | 
	
	
		
			
			|  | @@ -306,6 +340,7 @@ function keyserver_sync {
 | 
	
		
			
			| 306 | 340 |      if [ ${#other_keyserver_port} -lt 4 ]; then
 | 
	
		
			
			| 307 | 341 |          return
 | 
	
		
			
			| 308 | 342 |      fi
 | 
	
		
			
			|  | 343 | +    keyserver_create_membership
 | 
	
		
			
			| 309 | 344 |      if grep -q "$other_keyserver_domain $other_keyserver_port" /etc/sks/membership; then
 | 
	
		
			
			| 310 | 345 |          return
 | 
	
		
			
			| 311 | 346 |      fi
 | 
	
	
		
			
			|  | @@ -321,6 +356,9 @@ function keyserver_sync {
 | 
	
		
			
			| 321 | 356 |  }
 | 
	
		
			
			| 322 | 357 |  
 | 
	
		
			
			| 323 | 358 |  function keyserver_edit {
 | 
	
		
			
			|  | 359 | +    if [ ! -f /etc/sks/membership ]; then
 | 
	
		
			
			|  | 360 | +        return
 | 
	
		
			
			|  | 361 | +    fi
 | 
	
		
			
			| 324 | 362 |      editor /etc/sks/membership
 | 
	
		
			
			| 325 | 363 |      chown -Rc debian-sks: /etc/sks/membership
 | 
	
		
			
			| 326 | 364 |      systemctl restart sks
 | 
	
	
		
			
			|  | @@ -333,11 +371,10 @@ function configure_interactive_keyserver {
 | 
	
		
			
			| 333 | 371 |          trap "rm -f $data" 0 1 2 5 15
 | 
	
		
			
			| 334 | 372 |          dialog --backtitle $"Freedombone Control Panel" \
 | 
	
		
			
			| 335 | 373 |                 --title $"SKS Keyserver" \
 | 
	
		
			
			| 336 |  | -               --radiolist $"Choose an operation:" 12 70 4 \
 | 
	
		
			
			|  | 374 | +               --radiolist $"Choose an operation:" 11 70 3 \
 | 
	
		
			
			| 337 | 375 |                 1 $"Sync with other keyserver" off \
 | 
	
		
			
			| 338 | 376 |                 2 $"Edit sync keyservers" off \
 | 
	
		
			
			| 339 |  | -               3 $"Import public keys database" off \
 | 
	
		
			
			| 340 |  | -               4 $"Exit" on 2> $data
 | 
	
		
			
			|  | 377 | +               3 $"Exit" on 2> $data
 | 
	
		
			
			| 341 | 378 |          sel=$?
 | 
	
		
			
			| 342 | 379 |          case $sel in
 | 
	
		
			
			| 343 | 380 |              1) return;;
 | 
	
	
		
			
			|  | @@ -346,8 +383,7 @@ function configure_interactive_keyserver {
 | 
	
		
			
			| 346 | 383 |          case $(cat $data) in
 | 
	
		
			
			| 347 | 384 |              1) keyserver_sync;;
 | 
	
		
			
			| 348 | 385 |              2) keyserver_edit;;
 | 
	
		
			
			| 349 |  | -            3) keyserver_import_keys;;
 | 
	
		
			
			| 350 |  | -            4) break;;
 | 
	
		
			
			|  | 386 | +            3) break;;
 | 
	
		
			
			| 351 | 387 |          esac
 | 
	
		
			
			| 352 | 388 |      done
 | 
	
		
			
			| 353 | 389 |  }
 |