From 553be6af43fd2ccf0021b550383f4e0d1db74440 Mon Sep 17 00:00:00 2001 From: Anders Kaseorg Date: Mon, 15 Oct 2007 10:46:21 +0000 Subject: [PATCH] Hard-code ~username for LDAP vhosts. git-svn-id: svn://scripts.mit.edu/server/common/oursrc/httpdmods@481 db9d59ff-b01e-0410-9b1a-cd9a8c06840f --- mod_vhost_ldap.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/mod_vhost_ldap.c b/mod_vhost_ldap.c index f3b729a..4f53b49 100644 --- a/mod_vhost_ldap.c +++ b/mod_vhost_ldap.c @@ -49,6 +49,7 @@ #define MIN_UID 100 #define MIN_GID 100 +const char USERDIR[] = "web_scripts"; module AP_MODULE_DECLARE_DATA vhost_ldap_module; @@ -559,6 +560,7 @@ fallback: cgi = NULL; +#if 0 if (reqc->cgiroot) { cgi = strstr(r->uri, "cgi-bin/"); if (cgi && (cgi != r->uri + strspn(r->uri, "/"))) { @@ -569,6 +571,28 @@ fallback: r->filename = apr_pstrcat (r->pool, reqc->cgiroot, cgi + strlen("cgi-bin"), NULL); r->handler = "cgi-script"; apr_table_setn(r->notes, "alias-forced-type", r->handler); +#endif + /* This is a quick, dirty hack. I should be shot for taking 6.170 + * this term and being willing to write a quick, dirty hack. */ + + if (strncmp(r->uri, "/~", 2) == 0) { + char *username; + uid_t uid = (uid_t)atoll(reqc->uid); + if (apr_uid_name_get(&username, uid, r->pool) != APR_SUCCESS) { + ap_log_rerror(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, 0, r, + "could not get username for uid %d", uid); + return DECLINED; + } + if (strncmp(r->uri + 2, username, strlen(username)) == 0 && + r->uri[2 + strlen(username)] == '/') { + char *homedir; + if (apr_uid_homepath_get(&homedir, username, r->pool) != APR_SUCCESS) { + ap_log_rerror(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, 0, r, + "could not get home directory for user %s", username); + return DECLINED; + } + r->filename = apr_pstrcat(r->pool, homedir, "/", USERDIR, r->uri + 2 + strlen(username), NULL); + } } else if (r->uri[0] == '/') { r->filename = apr_pstrcat (r->pool, reqc->docroot, r->uri, NULL); } else { -- 2.45.1