diff -Nur proftpd-1.2.4.flo/modules/mod_ldap.c proftpd-1.2.4/modules/mod_ldap.c --- proftpd-1.2.4.flo/modules/mod_ldap.c Fri Jan 25 15:35:56 2002 +++ proftpd-1.2.4/modules/mod_ldap.c Fri Jan 25 16:49:37 2002 @@ -90,7 +90,7 @@ *ldap_auth_prefix, *ldap_uid_prefix, *ldap_gid_prefix, *ldap_defaultauthscheme, *ldap_authbind_dn, *ldap_hdod_suffix, *ldap_check_allow = NULL, *ldap_check_deny = NULL, - *ldap_hdod_script = NULL; + *ldap_hdod_script = NULL, *ldap_hdod_prefix; static array_header *ldap_check_allow_result = NULL, *ldap_check_deny_result = NULL; static int ldap_doauth = 0, ldap_douid = 0, ldap_dogid = 0, ldap_authbinds = 0, ldap_negcache = 0, ldap_querytimeout = 0, @@ -358,6 +358,10 @@ ldap_msgfree(result); + /* Create pw_dir from hdod_prefix and username */ + if (ldap_hdod && ldap_hdod_prefix) + pw->pw_dir=pstrcat(p, ldap_hdod_prefix, "/", pw->pw_name, NULL); + /* Set defaultuid/gid if force mode */ if (ldap_forcedefaultuid && ldap_defaultuid != -1) pw->pw_uid = ldap_defaultuid; @@ -370,6 +374,7 @@ log_pri(LOG_WARNING, "ldap_auth: ldap_user_lookup(): unable to create home directory %s: %s", pw->pw_dir, strerror(errno)); return(NULL); } + chown(pw->pw_dir, pw->pw_uid, pw->pw_gid); homedirisnew = 1; } @@ -380,6 +385,7 @@ log_pri(LOG_WARNING, "ldap_auth: ldap_user_lookup(): unable to create home directory suffix %s: %s", hdod_fulldir, strerror(errno)); return(NULL); } + chown(hdod_fulldir, pw->pw_uid, pw->pw_gid); } } @@ -1194,6 +1200,19 @@ return(HANDLED(cmd)); } +MODRET set_ldap_hdodprefix(cmd_rec *cmd) +{ + config_rec *c; + + CHECK_ARGS(cmd, 1); + CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL|CONF_GLOBAL); + + c = add_config_param_str("LDAPHomedirOnDemandPrefix", 1, cmd->argv[1]); + c->flags |= CF_MERGEDOWN; + + return(HANDLED(cmd)); +} + MODRET set_ldap_defaultauthscheme(cmd_rec *cmd) { config_rec *c; @@ -1316,6 +1335,7 @@ } ldap_hdod_suffix = (char *)get_param_ptr(main_server->conf, "LDAPHomedirOnDemandSuffix", FALSE); + ldap_hdod_prefix = (char *)get_param_ptr(main_server->conf, "LDAPHomedirOnDemandPrefix", FALSE); ldap_hdod_script = (char *)get_param_ptr(main_server->conf, "LDAPHomedirOnDemandScript", FALSE); /* If ldap_defaultauthscheme is NULL, ldap_check() will assume crypt. */ @@ -1424,6 +1444,7 @@ { "LDAPForceDefaultGID", set_ldap_forcedefaultgid, NULL }, { "LDAPHomedirOnDemand", set_ldap_hdod, NULL }, { "LDAPHomedirOnDemandSuffix", set_ldap_hdodsuffix, NULL }, + { "LDAPHomedirOnDemandPrefix", set_ldap_hdodprefix, NULL }, { "LDAPHomedirOnDemandScript", set_ldap_hdod_script, NULL }, { "LDAPDefaultAuthScheme", set_ldap_defaultauthscheme, NULL }, { "LDAPCheckAllow", set_ldap_allow, NULL },