RTSP (09 Jan 2003)
RTSP is the protocol used by RealPlayer to stream its stuff. Now RealPlayer is pretty evil, but RTSP looks slightly open. At least Real provides a proxy server for it.
We'll see how it works tomorrow, but for the moment the essential agl patch; chroot and setuidgid.
--- rtspproxy.cpp Fri Feb 9 23:38:53 2001
+++ rtspproxy.cpp Thu Jan 9 17:10:32 2003
@@ -12,6 +12,9 @@
#include <string.h>
#include <signal.h>
#include <stdarg.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <grp.h>
#include "app.h"
#include "rtspproxy.h"
@@ -1277,6 +1280,8 @@
printf( " -v Print version information.\n");
printf( " -h Display this help message.\n");
printf( " -d Enable useful debug messages.\n");
+ printf( " -u <uid> <gid> Set UID and GID.\n");
+ printf( " -c <path> Chroot to path.\n");
}
int main( int argc, char** argv )
@@ -1328,6 +1333,31 @@
{
g_DebugFlagTurnedOn = true;
}
+ else if ( strcasecmp (argv[i], "-c" ) == 0 ) {
+ if (i + 1 >= argc) { Usage (argv[0]); exit(1); }
+ i++;
+ if (chroot (argv[i]) == -1) { perror ("Failed to chroot"); exit(1); }
+ if (chdir ("/") == -1) { perror ("Failed to chdir after chroot"); exit (1); }
+ }
+ else if ( strcasecmp (argv[i], "-u" ) == 0 ) {
+ if (i + 1 >= argc) { Usage (argv[0]); exit(1); }
+ i++;
+ INT16 uid = atoi ( argv[i] );
+ if (uid == 0) { printf ("Bad uid\n"); exit (1); }
+ if (i + 1 >= argc) { Usage (argv[0]); exit(1); }
+ i++;
+ gid_t gid = atoi ( argv[i] );
+ if (gid == 0) { printf ("Bad uid\n"); exit (1); }
+
+ if (setgroups (1, &gid) == -1) {
+ perror ("failed to set groups");
+ exit (1);
+ }
+ if (setuid (uid) == -1) {
+ perror ("failed to set uid");
+ exit (1);
+ }
+ }
}
app.Run();