dovecot-2.2: imap-urlauth: Fixes to handling anonymous user
dovecot at dovecot.org
dovecot at dovecot.org
Sun Sep 16 16:02:59 EEST 2012
details: http://hg.dovecot.org/dovecot-2.2/rev/7e1f0146169f
changeset: 15076:7e1f0146169f
user: Stephan Bosch <stephan at rename-it.nl>
date: Sun Sep 16 16:02:15 2012 +0300
description:
imap-urlauth: Fixes to handling anonymous user
diffstat:
src/imap-urlauth/imap-urlauth-worker.c | 4 +++-
src/imap/imap-client.c | 4 ++--
src/lib-imap-urlauth/imap-urlauth-private.h | 2 ++
src/lib-imap-urlauth/imap-urlauth.c | 17 ++++++++++-------
src/lib-imap-urlauth/imap-urlauth.h | 1 +
5 files changed, 18 insertions(+), 10 deletions(-)
diffs (131 lines):
diff -r 009d19d5f0f1 -r 7e1f0146169f src/imap-urlauth/imap-urlauth-worker.c
--- a/src/imap-urlauth/imap-urlauth-worker.c Sun Sep 16 16:02:11 2012 +0300
+++ b/src/imap-urlauth/imap-urlauth-worker.c Sun Sep 16 16:02:15 2012 +0300
@@ -73,9 +73,9 @@
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;
};
@@ -639,6 +639,7 @@
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);
@@ -873,6 +874,7 @@
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,
diff -r 009d19d5f0f1 -r 7e1f0146169f src/imap/imap-client.c
--- a/src/imap/imap-client.c Sun Sep 16 16:02:11 2012 +0300
+++ b/src/imap/imap-client.c Sun Sep 16 16:02:15 2012 +0300
@@ -50,8 +50,8 @@
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);
}
diff -r 009d19d5f0f1 -r 7e1f0146169f src/lib-imap-urlauth/imap-urlauth-private.h
--- a/src/lib-imap-urlauth/imap-urlauth-private.h Sun Sep 16 16:02:11 2012 +0300
+++ b/src/lib-imap-urlauth/imap-urlauth-private.h Sun Sep 16 16:02:15 2012 +0300
@@ -13,6 +13,8 @@
char *access_user;
const char **access_applications;
+
+ unsigned int access_anonymous:1;
};
#endif
diff -r 009d19d5f0f1 -r 7e1f0146169f src/lib-imap-urlauth/imap-urlauth.c
--- a/src/lib-imap-urlauth/imap-urlauth.c Sun Sep 16 16:02:11 2012 +0300
+++ b/src/lib-imap-urlauth/imap-urlauth.c Sun Sep 16 16:02:15 2012 +0300
@@ -45,8 +45,11 @@
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 =
@@ -160,9 +163,9 @@
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);
@@ -174,7 +177,7 @@
}
} 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;
}
@@ -185,7 +188,7 @@
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);
@@ -269,7 +272,7 @@
*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);
@@ -373,7 +376,7 @@
}
/* 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;
diff -r 009d19d5f0f1 -r 7e1f0146169f src/lib-imap-urlauth/imap-urlauth.h
--- a/src/lib-imap-urlauth/imap-urlauth.h Sun Sep 16 16:02:11 2012 +0300
+++ b/src/lib-imap-urlauth/imap-urlauth.h Sun Sep 16 16:02:15 2012 +0300
@@ -18,6 +18,7 @@
const char *access_user;
const char *const *access_applications;
+ bool access_anonymous;
};
int imap_urlauth_init(struct mail_user *user,
More information about the dovecot-cvs
mailing list