#include <atalk/server_ipc.h>
#include <atalk/uuid.h>
#include <atalk/globals.h>
+#include <atalk/fce_api.h>
#include <atalk/spotlight.h>
#include <atalk/unix.h>
afp_switch = postauth_switch;
switch (obj->afp_version) {
+ case 34:
case 33:
case 32:
#ifdef HAVE_ACLS
case 31:
uam_afpserver_action(AFP_SYNCDIR, UAM_AFPSERVER_POSTAUTH, afp_syncdir, NULL);
uam_afpserver_action(AFP_SYNCFORK, UAM_AFPSERVER_POSTAUTH, afp_syncfork, NULL);
+#ifdef HAVE_TRACKER
uam_afpserver_action(AFP_SPOTLIGHT_PRIVATE, UAM_AFPSERVER_POSTAUTH, afp_spotlight_rpc, NULL);
+#endif
uam_afpserver_action(AFP_ENUMERATE_EXT2, UAM_AFPSERVER_POSTAUTH, afp_enumerate_ext2, NULL);
case 30:
return AFPERR_NOTAUTH;
}
- LOG(log_note, logtype_afpd, "%s Login by %s",
- afp_versions[afp_version_index].av_name, pwd->pw_name);
+ if (obj->cnx_cnt > obj->cnx_max) {
+ LOG(log_error, logtype_dsi, "login: too many connections, limit: %d", obj->cnx_max);
+ return AFPERR_MAXSESS;
+ }
+
+ LOG(log_note, logtype_afpd, "Login by %s (%s)",
+ pwd->pw_name, afp_versions[afp_version_index].av_name);
if (set_groups(obj, pwd) != 0)
return AFPERR_BADUAM;
/* Some PAM module might have reset our signal handlers and timer, so we need to reestablish them */
afp_over_dsi_sighandlers(obj);
+ /* Send FCE login event */
+ fce_register(obj, FCE_LOGIN, "", NULL);
+
return( AFP_OK );
}
close_all_vol(obj);
dsi->flags = DSI_AFP_LOGGED_OUT;
*rbuflen = 0;
+
+ /* Send FCE login event */
+ fce_register(obj, FCE_LOGOUT, "", NULL);
+
return AFP_OK;
}
}
/* load all of the modules */
-int auth_load(const char *path, const char *list)
+int auth_load(AFPObj *obj, const char *path, const char *list)
{
- char name[MAXPATHLEN + 1], buf[MAXPATHLEN + 1], *p;
+ char name[MAXPATHLEN + 1], buf[MAXPATHLEN + 1], *p, *last;
struct uam_mod *mod;
struct stat st;
size_t len;
if (!path || !*path || !list || (len = strlen(path)) > sizeof(name) - 2)
return -1;
+ LOG(log_debug, logtype_afpd, "auth_load: %s, %s", path, list);
+
strlcpy(buf, list, sizeof(buf));
- if ((p = strtok(buf, ", ")) == NULL)
+ if ((p = strtok_r(buf, ", ", &last)) == NULL)
return -1;
strcpy(name, path);
if ((stat(name, &st) == 0) && (mod = uam_load(name, p))) {
*/
if (stat(name, &st) == 0) {
- if ((mod = uam_load(name, p))) {
+ if ((mod = uam_load(obj, name, p))) {
uam_attach(&uam_modules, mod);
LOG(log_debug, logtype_afpd, "uam: %s loaded", p);
} else {
} else {
LOG(log_info, logtype_afpd, "uam: uam not found (status=%d)", stat(name, &st));
}
- p = strtok(NULL, ", ");
+ p = strtok_r(NULL, ", ", &last);
}
return 0;