unsigned int debug:1;
unsigned int finished:1;
+ unsigned int waiting_input:1;
unsigned int version_received:1;
unsigned int access_received:1;
- unsigned int waiting_input:1;
unsigned int access_anonymous:1;
};
config.url_host = set->imap_urlauth_host;
config.url_port = set->imap_urlauth_port;
config.access_user = client->access_user;
+ config.access_anonymous = client->access_anonymous;
config.access_applications =
(const void *)array_get(&client->access_apps, &count);
client->access_user = i_strdup(*args);
client->access_anonymous = FALSE;
} else {
+ client->access_user = i_strdup("anonymous");
client->access_anonymous = TRUE;
}
i_set_failure_prefix(t_strdup_printf("imap-urlauth[%s](%s): ", my_pid,
config.socket_path = t_strconcat(client->user->set->base_dir,
"/"IMAP_URLAUTH_SOCKET_NAME, NULL);
config.session_id = client->session_id;
- config.access_user = client->user->anonymous ? NULL :
- client->user->username;
+ config.access_anonymous = client->user->anonymous;
+ config.access_user = client->user->username;
return imap_urlauth_init(client->user, &config, &client->urlauth_ctx);
}
uctx->url_host = i_strdup(my_hostdomain());
uctx->url_port = config->url_port;
- if (config->access_user != NULL && *config->access_user != '\0')
+ if (config->access_anonymous)
+ uctx->access_user = i_strdup("anonymous");
+ else
uctx->access_user = i_strdup(config->access_user);
+ uctx->access_anonymous = config->access_anonymous;
if (config->access_applications != NULL &&
*config->access_applications != NULL) {
uctx->access_applications =
if (strcasecmp(url->uauth_access_application, "user") == 0) {
/* user+<access_user> */
- if (uctx->access_user == NULL ||
+ if (uctx->access_anonymous ||
strcasecmp(url->uauth_access_user, uctx->access_user) != 0) {
- if (uctx->access_user == NULL) {
+ if (uctx->access_anonymous) {
*error_r = t_strdup_printf(
"No 'user+%s' access allowed for anonymous user",
url->uauth_access_user);
}
} else if (strcasecmp(url->uauth_access_application, "authuser") == 0) {
/* authuser */
- if (uctx->access_user == NULL) {
+ if (uctx->access_anonymous) {
*error_r = "No 'authuser' access allowed for anonymous user";
return FALSE;
}
const char *userid = url->uauth_access_user == NULL ? "" :
t_strdup_printf("+%s", url->uauth_access_user);
- if (uctx->access_user == NULL) {
+ if (uctx->access_anonymous) {
*error_r = t_strdup_printf(
"No '%s%s' access allowed for anonymous user",
url->uauth_access_application, userid);
*error_r = "Invalid URL: Missing user name";
return 0;
}
- if (strcmp(url->userid, user->username) != 0) {
+ if (user->anonymous || strcmp(url->userid, user->username) != 0) {
*error_r = t_strdup_printf(
"Not permitted to generate URLAUTH for user %s",
url->userid);
}
/* validate target user */
- if (strcmp(url->userid, user->username) != 0) {
+ if (user->anonymous || strcmp(url->userid, user->username) != 0) {
*error_r = t_strdup_printf("Not permitted to fetch URLAUTH for user %s",
url->userid);
*error_code_r = MAIL_ERROR_PARAMS;