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 wait = no
user = root user = root
server = /usr/sbin/in.telnetd 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 rlimit_cpu = 3600
bind = 64.71.163.206 bind = 64.71.163.206
} }
A classic inetd line would look like this: 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 In both cases, the -L specifies an alternate login program (telnetlogin is
invoked by default) and -h prevents revealing of a login banner (for 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 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. 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 For dgamelaunch, the -q option will silence errors pertaining to the server
configuration. This is recommended for use within inetd to prevent spamming 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 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; unsigned int len;
int c; int c;
while ((c = getopt(argc, argv, "qh:p")) != -1) while ((c = getopt(argc, argv, "qh:p:f:")) != -1)
{ {
switch (c) switch (c)
{ {
case 'q': case 'q':
silent = 1; break; silent = 1; break;
case 'f':
if (config)
{
if (!silent)
fprintf(stderr, "warning: using %s\n", argv[optind]);
free(config);
}
config = strdup(optarg);
break;
default: default:
break; /*ignore */ 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(); create_config();
/* signal handlers */ /* signal handlers */