diff -ru subversion-0.37.0.untouched/subversion/svnserve/main.c subversion-0.37.0/subversion/svnserve/main.c
--- subversion-0.37.0.untouched/subversion/svnserve/main.c	2004-01-10 00:07:57.000000000 +0200
+++ subversion-0.37.0/subversion/svnserve/main.c	2004-02-13 13:55:37.000000000 +0200
@@ -110,6 +110,7 @@
     {"threads",          'T', 0, "use threads instead of fork"},
 #endif
     {"listen-once",      'X', 0, "listen once (useful for debugging)"},
+    {"user",             'u', 1, "username (used instead of uid)"},
     {0,                  0,   0, 0}
   };
 
@@ -176,7 +177,7 @@
 {
   struct serve_thread_t *d = data;
 
-  svn_error_clear(serve(d->conn, d->root, FALSE, d->read_only, d->pool));
+  svn_error_clear(serve(d->conn, d->root, FALSE, d->read_only, NULL, d->pool));
   svn_pool_destroy(d->pool);
 
   return NULL;
@@ -208,6 +209,7 @@
   enum connection_handling_mode handling_mode = CONNECTION_DEFAULT;
   apr_uint16_t port = SVN_RA_SVN_PORT;
   const char *host = NULL;
+  const char *user = NULL;
 
   /* Initialize the app. */
   if (svn_cmdline_init("svn", stderr) != EXIT_SUCCESS)
@@ -279,6 +281,10 @@
         case 'T':
           handling_mode = connection_mode_thread;
           break;
+
+        case 'u':
+          user = arg;
+          break;
         }
     }
   if (os->ind != argc)
@@ -298,7 +304,7 @@
       apr_file_open_stdout(&out_file, pool);
       conn = svn_ra_svn_create_conn(NULL, in_file, out_file, pool);
       svn_error_clear(serve(conn, root, run_mode == run_mode_tunnel,
-                            read_only, pool));
+                            read_only, user, pool));
       exit(0);
     }
 
@@ -374,7 +380,7 @@
 
       if (run_mode == run_mode_listen_once)
         {
-          err = serve(conn, root, FALSE, read_only, connection_pool);
+          err = serve(conn, root, FALSE, read_only, NULL, connection_pool);
 
           if (err && err->apr_err != SVN_ERR_RA_SVN_CONNECTION_CLOSED)
             svn_handle_error(err, stdout, FALSE);
@@ -392,7 +398,7 @@
           status = apr_proc_fork(&proc, connection_pool);
           if (status == APR_INCHILD)
             {
-              svn_error_clear(serve(conn, root, FALSE, read_only,
+              svn_error_clear(serve(conn, root, FALSE, read_only, NULL,
                                     connection_pool));
               apr_socket_close(usock);
               exit(0);
@@ -447,7 +453,7 @@
 
         case connection_mode_single:
           /* Serve one connection at a time. */
-          svn_error_clear(serve(conn, root, FALSE, read_only,
+          svn_error_clear(serve(conn, root, FALSE, read_only, NULL,
                                 connection_pool));
           svn_pool_destroy(connection_pool);
         }
diff -ru subversion-0.37.0.untouched/subversion/svnserve/serve.c subversion-0.37.0/subversion/svnserve/serve.c
--- subversion-0.37.0.untouched/subversion/svnserve/serve.c	2004-01-10 00:07:57.000000000 +0200
+++ subversion-0.37.0/subversion/svnserve/serve.c	2004-02-13 17:55:44.000000000 +0200
@@ -143,16 +143,18 @@
   if (get_access(b, AUTHENTICATED) >= required
       && b->tunnel && strcmp(mech, "EXTERNAL") == 0)
     {
-      apr_uid_t uid;
-      apr_gid_t gid;
-
       if (!mecharg)  /* Must be present */
         return svn_ra_svn_write_tuple(conn, pool, "w(c)", "failure",
                                       "Mechanism argument must be present");
-      if (apr_uid_current(&uid, &gid, pool) != APR_SUCCESS
-          || apr_uid_name_get((char **) &b->user, uid, pool) != APR_SUCCESS)
-        return svn_ra_svn_write_tuple(conn, pool, "w(c)", "failure",
+      if (!b->user) {
+	apr_uid_t uid;
+	apr_gid_t gid;
+
+	if (apr_uid_current(&uid, &gid, pool) != APR_SUCCESS
+	    || apr_uid_name_get((char **) &b->user, uid, pool) != APR_SUCCESS)
+	  return svn_ra_svn_write_tuple(conn, pool, "w(c)", "failure",
                                       "Can't determine username");
+      }
       if (*mecharg && strcmp(mecharg, b->user) != 0)
         return svn_ra_svn_write_tuple(conn, pool, "w(c)", "failure",
                                       "Requested username does not match");
@@ -1033,6 +1035,7 @@
 
 svn_error_t *serve(svn_ra_svn_conn_t *conn, const char *root,
                    svn_boolean_t tunnel, svn_boolean_t read_only,
+		   const char *user,
                    apr_pool_t *pool)
 {
   svn_error_t *err, *io_err;
@@ -1045,7 +1048,7 @@
 
   b.tunnel = tunnel;
   b.read_only = read_only;
-  b.user = NULL;
+  b.user = user;
   b.cfg = NULL;  /* Ugly; can drop when we remove v1 support. */
   b.pwdb = NULL; /* Likewise */
 
diff -ru subversion-0.37.0.untouched/subversion/svnserve/server.h subversion-0.37.0/subversion/svnserve/server.h
--- subversion-0.37.0.untouched/subversion/svnserve/server.h	2004-01-10 00:07:57.000000000 +0200
+++ subversion-0.37.0/subversion/svnserve/server.h	2004-02-13 13:56:26.000000000 +0200
@@ -29,6 +29,7 @@
 
 svn_error_t *serve(svn_ra_svn_conn_t *conn, const char *root,
                    svn_boolean_t tunnel, svn_boolean_t read_only,
+		   const char *user,
                    apr_pool_t *pool);
 
 #ifdef __cplusplus


