Blame src/daemon/server_config.pl

Packit Service 407539
#!/usr/bin/perl -w
Packit Service 407539
Packit Service 407539
require 5.004;
Packit Service 407539
use strict;
Packit Service 407539
Packit Service 407539
print "Enter port the server should listen on [42800]: ";
Packit Service 407539
Packit Service 407539
my $port = <stdin>; chop $port;
Packit Service 407539
$port = 42800 unless $port =~ /^\d+$/;
Packit Service 407539
Packit Service 407539
print "\nUser name or UID to run as [nobody]: ";
Packit Service 407539
Packit Service 407539
my $user = <stdin>; chop $user; $user = 'nobody' if $user eq '';
Packit Service 407539
Packit Service 407539
my ($login, $pass, $uid, $gid);
Packit Service 407539
Packit Service 407539
unless ($user =~ /^\d+$/) {
Packit Service 407539
    ($login, $pass, $uid, $gid) = getpwnam ($user) or
Packit Service 407539
	die "User '$user' not in passwd file.";
Packit Service 407539
}
Packit Service 407539
Packit Service 407539
my $g_default = (defined $gid) ? $gid : 'nogroup';
Packit Service 407539
Packit Service 407539
print "Group name or GID to run as [$g_default]: ";
Packit Service 407539
Packit Service 407539
my $group = <stdin>; chop $group; $group = $g_default if $group eq '';
Packit Service 407539
Packit Service 407539
unless ($group =~ /^\d+$/) {
Packit Service 407539
    $gid = getgrnam ($group) or
Packit Service 407539
	die "Group '$group' not in group file.";
Packit Service 407539
}
Packit Service 407539
Packit Service 407539
print "\nEnter list of hosts which should be authorized to";
Packit Service 407539
print "\nconnect to the server (terminate with a blank line):\n\n";
Packit Service 407539
Packit Service 407539
print "SECURITY WARNING:\n";
Packit Service 407539
print "  Enabling access for a particular hosts means the ALL USERS on this host will\n";
Packit Service 407539
print "  be allowed to connect to the server !\n\n";
Packit Service 407539
Packit Service 407539
print "  If you want security, let this table empty and use the 'xauth' method instead.\n";
Packit Service 407539
print "  Look at the manpage of gnuserv (1) as shipped with GNU Emacs for more details\n";
Packit Service 407539
print "  about security. The server uses the same security mechanisms like gnuserv from\n";
Packit Service 407539
print "  XEmacs 20.3\n\n";
Packit Service 407539
Packit Service 407539
my @hosts = ();
Packit Service 407539
my @host_addrs = ();
Packit Service 407539
my @host_names = ();
Packit Service 407539
Packit Service 407539
while (1) {
Packit Service 407539
    print "Host: ";
Packit Service 407539
Packit Service 407539
    my $host = <stdin>; chop $host; 
Packit Service 407539
    last if $host eq '';
Packit Service 407539
Packit Service 407539
    my ($name,$aliases,$addrtype,$length,@addrs) = gethostbyname ($host) or
Packit Service 407539
	die "gethostbyname (): Can't resolve '$host'";
Packit Service 407539
    
Packit Service 407539
    my ($a,$b,$c,$d) = unpack('C4',$addrs[0]);
Packit Service 407539
Packit Service 407539
    push @hosts, sprintf ("0x%02X%02X%02X%02X", $d, $c, $b, $a);
Packit Service 407539
    push @host_addrs, sprintf ("%d.%d.%d.%d", $a, $b, $c, $d);
Packit Service 407539
    push @host_names, $name;
Packit Service 407539
};
Packit Service 407539
Packit Service 407539
print "\n";
Packit Service 407539
print "This is your config:\n";
Packit Service 407539
print "====================\n\n"; 
Packit Service 407539
Packit Service 407539
printf qq[%-30s: %d\n\n], 'Port', $port;
Packit Service 407539
printf qq[%-30s: %d\n], 'UID', $uid;
Packit Service 407539
printf qq[%-30s: %d\n\n], 'GID', $gid;
Packit Service 407539
Packit Service 407539
foreach (0..$#hosts) {
Packit Service 407539
    printf qq[%-30s (%s - %s)\n], $host_names[$_], $hosts[$_], $host_addrs [$_];
Packit Service 407539
}
Packit Service 407539
Packit Service 407539
print "\n";
Packit Service 407539
Packit Service 407539
print "Accept? (yes/no) ";
Packit Service 407539
Packit Service 407539
my $accept = <stdin>; chop $accept;
Packit Service 407539
Packit Service 407539
exit unless $accept eq 'yes';
Packit Service 407539
Packit Service 407539
print "\n";
Packit Service 407539
Packit Service 407539
open CONFIG, "> server_config.h" or
Packit Service 407539
    die "open (server_config.h): $!";
Packit Service 407539
select CONFIG;
Packit Service 407539
Packit Service 407539
printf qq[\#define SERVER_PORT\t\t%d\n\n], $port;
Packit Service 407539
Packit Service 407539
printf qq[\#define SERVER_UID\t\t%d\n], $uid;
Packit Service 407539
printf qq[\#define SERVER_GID\t\t%d\n\n], $gid;
Packit Service 407539
Packit Service 407539
printf qq[\#define HOST_TABLE_ENTRIES\t%d\n\n], $#hosts + 1;
Packit Service 407539
Packit Service 407539
foreach (@host_names) {
Packit Service 407539
    $_ = qq["$_"];
Packit Service 407539
}
Packit Service 407539
Packit Service 407539
printf qq[const char *permitted_host_names [HOST_TABLE_ENTRIES] = \n];
Packit Service 407539
printf qq[{ %s };\n\n], join (', ', @host_names);
Packit Service 407539
Packit Service 407539
printf qq[unsigned long permitted_hosts [HOST_TABLE_ENTRIES];\n];
Packit Service 407539
Packit Service 407539
close CONFIG;
Packit Service 407539
Packit Service 407539
select STDOUT;
Packit Service 407539
Packit Service 407539
print "Your config has successfully been written to 'server_config.h'.\n";