SECURITY: accept only argument following -f for dgamelaunch.conf path

git-svn-id: svn://katsu.triplehelix.org/dgamelaunch/trunk@218 db0b04b0-f4d1-0310-9a6d-de3e77497b0e
This commit is contained in:
Joshua Kwan 2004-02-02 22:57:54 +00:00
parent 142b5d434e
commit f0efefec2f
2 changed files with 17 additions and 18 deletions

7
README
View File

@ -77,14 +77,14 @@ service telnet
wait = no
user = root
server = /usr/sbin/in.telnetd
server_args = -h -L /opt/nethack/nethack.dtype.org/dgamelaunch -q /etc/dgamelaunch.conf
server_args = -h -L /opt/nethack/nethack.dtype.org/dgamelaunch -q -f /etc/dgamelaunch.conf
rlimit_cpu = 3600
bind = 64.71.163.206
}
A classic inetd line would look like this:
telnet stream tcp nowait root.root /usr/sbin/tcpd /usr/sbin/in.telnetd -h -L /usr/sbin/dgamelaunch -q /etc/dgamelaunch.conf
telnet stream tcp nowait root.root /usr/sbin/tcpd /usr/sbin/in.telnetd -h -L /usr/sbin/dgamelaunch -q -f /etc/dgamelaunch.conf
In both cases, the -L specifies an alternate login program (telnetlogin is
invoked by default) and -h prevents revealing of a login banner (for
@ -100,6 +100,9 @@ telnetd uses -p instead, and you can't give arguments (arguments appropriate
to standard login are used), so it's necessary to start a shell script from
it. Some other telnetds do not support anything like this at all.
The -f option, followed by a filename, specifies the path to the config file
to use for dgamelaunch.
For dgamelaunch, the -q option will silence errors pertaining to the server
configuration. This is recommended for use within inetd to prevent spamming
the clients, but when testing and setting up we strongly suggest you leave it

View File

@ -1480,33 +1480,29 @@ main (int argc, char** argv)
unsigned int len;
int c;
while ((c = getopt(argc, argv, "qh:p")) != -1)
while ((c = getopt(argc, argv, "qh:p:f:")) != -1)
{
switch (c)
{
case 'q':
silent = 1; break;
case 'f':
if (config)
{
if (!silent)
fprintf(stderr, "warning: using %s\n", argv[optind]);
free(config);
}
config = strdup(optarg);
break;
default:
break; /*ignore */
}
}
if (optind < argc)
{
while (optind < argc)
{
if (config)
{
if (!silent)
fprintf(stderr, "warning: using %s\n", argv[optind]);
free(config);
}
config = strdup(argv[optind]);
optind++;
}
}
create_config();
/* signal handlers */