diff -Nur proftpd-1.2.4/contrib/mod_ldap.c proftpd-1.2.4.flo/contrib/mod_ldap.c --- proftpd-1.2.4/contrib/mod_ldap.c Fri Jan 25 15:35:21 2002 +++ proftpd-1.2.4.flo/contrib/mod_ldap.c Fri Jan 25 15:34:56 2002 @@ -95,6 +95,7 @@ static int ldap_doauth = 0, ldap_douid = 0, ldap_dogid = 0, ldap_authbinds = 0, ldap_negcache = 0, ldap_querytimeout = 0, ldap_defaultuid = -1, ldap_defaultgid = -1, + ldap_forcedefaultuid = 0, ldap_forcedefaultgid = 0, ldap_hdod = 0, ldap_hdod_mode = HOMEDIR_MODE, ldap_search_scope = LDAP_SCOPE_SUBTREE; struct timeval ldap_querytimeout_tp; @@ -357,6 +358,12 @@ ldap_msgfree(result); + /* Set defaultuid/gid if force mode */ + if (ldap_forcedefaultuid && ldap_defaultuid != -1) + pw->pw_uid = ldap_defaultuid; + if (ldap_forcedefaultgid && ldap_defaultgid != -1) + pw->pw_gid = ldap_defaultgid; + if (ldap_hdod && pw->pw_dir) { if (stat(pw->pw_dir, &st) == -1 && errno == ENOENT) { if (mkdir(pw->pw_dir, ldap_hdod_mode) != 0) { @@ -1123,6 +1130,38 @@ return HANDLED(cmd); } +MODRET set_ldap_forcedefaultuid(cmd_rec *cmd) +{ + int b; + config_rec *c; + + CHECK_CONF(cmd,CONF_ROOT|CONF_VIRTUAL|CONF_GLOBAL); + + if ((b = get_boolean(cmd, 1)) == -1) + CONF_ERROR(cmd, "LDAPForceDefaultUID: expected boolean argument for first argument."); + + c = add_config_param("LDAPForceDefaultUID", 1, (void *) b); + c->flags |= CF_MERGEDOWN; + + return HANDLED(cmd); +} + +MODRET set_ldap_forcedefaultgid(cmd_rec *cmd) +{ + int b; + config_rec *c; + + CHECK_CONF(cmd,CONF_ROOT|CONF_VIRTUAL|CONF_GLOBAL); + + if ((b = get_boolean(cmd, 1)) == -1) + CONF_ERROR(cmd, "LDAPForceDefaultGID: expected boolean argument for first argument."); + + c = add_config_param("LDAPForceDefaultGID", 1, (void *) b); + c->flags |= CF_MERGEDOWN; + + return HANDLED(cmd); +} + MODRET set_ldap_hdod(cmd_rec *cmd) { int b; @@ -1257,6 +1296,11 @@ ldap_defaultuid = get_param_int(main_server->conf, "LDAPDefaultUID", FALSE); ldap_defaultgid = get_param_int(main_server->conf, "LDAPDefaultGID", FALSE); + if (get_param_int(main_server->conf,"LDAPForceDefaultUID", FALSE) > 0) + ldap_forcedefaultuid = 1; + if (get_param_int(main_server->conf,"LDAPForceDefaultGID", FALSE) > 0) + ldap_forcedefaultgid = 1; + if (get_param_int(main_server->conf,"LDAPNegativeCache", FALSE) > 0) ldap_negcache = 1; @@ -1376,6 +1420,8 @@ { "LDAPDoGIDLookups", set_ldap_dogid, NULL }, { "LDAPDefaultUID", set_ldap_defaultuid, NULL }, { "LDAPDefaultGID", set_ldap_defaultgid, NULL }, + { "LDAPForceDefaultUID", set_ldap_forcedefaultuid, NULL }, + { "LDAPForceDefaultGID", set_ldap_forcedefaultgid, NULL }, { "LDAPHomedirOnDemand", set_ldap_hdod, NULL }, { "LDAPHomedirOnDemandSuffix", set_ldap_hdodsuffix, NULL }, { "LDAPHomedirOnDemandScript", set_ldap_hdod_script, NULL },