]> andersk Git - mod-vhost-ldap.git/commitdiff
Hard-code ~username for LDAP vhosts. scripts-rebased.r1463
authorGeoffrey Thomas <geofft@mit.edu>
Mon, 15 Oct 2007 10:46:21 +0000 (10:46 +0000)
committerAnders Kaseorg <andersk@mit.edu>
Sat, 13 Feb 2010 04:18:07 +0000 (23:18 -0500)
Signed-off-by: Geoffrey Thomas <geofft@mit.edu>
Signed-off-by: Anders Kaseorg <andersk@mit.edu>
mod_vhost_ldap.c

index dc8a9e181895e2f05b96caeaf04d42a1e34b533f..c00e56bddf015d43c097b198c89fe3b0f0ae8c9d 100644 (file)
@@ -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;
 
@@ -587,6 +588,7 @@ fallback:
 
     cgi = NULL;
   
+#if 0
     if (reqc->cgiroot) {
        cgi = strstr(r->uri, "cgi-bin/");
        if (cgi && (cgi != r->uri + strspn(r->uri, "/"))) {
@@ -597,6 +599,29 @@ 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)] == '/' ||
+            r->uri[2 + strlen(username)] == '\0')) {
+           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 {
This page took 0.051485 seconds and 5 git commands to generate.