Skip to content

Commit

Permalink
lib-storage: mail-user: Changed mail_user_set_vars() to accept struct…
Browse files Browse the repository at this point in the history
… mail_user_connection_data, rather than individual fields.
  • Loading branch information
stephanbosch authored and sirainen committed Dec 11, 2017
1 parent 6067018 commit ff4ba03
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 16 deletions.
8 changes: 6 additions & 2 deletions src/lib-storage/mail-storage-service.c
Expand Up @@ -660,17 +660,21 @@ mail_storage_service_init_post(struct mail_storage_service_ctx *ctx,
{
const struct mail_storage_settings *mail_set;
const char *home = priv->home;
struct mail_user_connection_data conn_data;
struct mail_user *mail_user;

i_zero(&conn_data);
conn_data.local_ip = &user->input.local_ip;
conn_data.remote_ip = &user->input.remote_ip;

/* NOTE: if more user initialization is added, add it also to
mail_user_dup() */
mail_user = mail_user_alloc_nodup_set(user->input.username,
user->user_info, user->user_set);
mail_user->_service_user = user;
mail_storage_service_user_ref(user);
mail_user_set_home(mail_user, *home == '\0' ? NULL : home);
mail_user_set_vars(mail_user, ctx->service->name,
&user->input.local_ip, &user->input.remote_ip);
mail_user_set_vars(mail_user, ctx->service->name, &conn_data);
mail_user->uid = priv->uid == (uid_t)-1 ? geteuid() : priv->uid;
mail_user->gid = priv->gid == (gid_t)-1 ? getegid() : priv->gid;
mail_user->anonymous = user->anonymous;
Expand Down
31 changes: 19 additions & 12 deletions src/lib-storage/mail-user.c
Expand Up @@ -227,21 +227,29 @@ struct mail_user *mail_user_find(struct mail_user *user, const char *name)
return NULL;
}

static void
mail_user_connection_init_from(struct mail_user_connection_data *conn,
pool_t pool, const struct mail_user_connection_data *src)
{
*conn = *src;

if (src->local_ip != NULL && src->local_ip->family != 0) {
conn->local_ip = p_new(pool, struct ip_addr, 1);
*conn->local_ip = *src->local_ip;
}
if (src->remote_ip != NULL && src->remote_ip->family != 0) {
conn->remote_ip = p_new(pool, struct ip_addr, 1);
*conn->remote_ip = *src->remote_ip;
}
}

void mail_user_set_vars(struct mail_user *user, const char *service,
const struct ip_addr *local_ip,
const struct ip_addr *remote_ip)
const struct mail_user_connection_data *conn)
{
i_assert(service != NULL);

user->service = p_strdup(user->pool, service);
if (local_ip != NULL && local_ip->family != 0) {
user->conn.local_ip = p_new(user->pool, struct ip_addr, 1);
*user->conn.local_ip = *local_ip;
}
if (remote_ip != NULL && remote_ip->family != 0) {
user->conn.remote_ip = p_new(user->pool, struct ip_addr, 1);
*user->conn.remote_ip = *remote_ip;
}
mail_user_connection_init_from(&user->conn, user->pool, conn);
}

const struct var_expand_table *
Expand Down Expand Up @@ -657,8 +665,7 @@ struct mail_user *mail_user_dup(struct mail_user *user)
}
if (user->_home != NULL)
mail_user_set_home(user2, user->_home);
mail_user_set_vars(user2, user->service,
user->conn.local_ip, user->conn.remote_ip);
mail_user_set_vars(user2, user->service, &user->conn);
user2->uid = user->uid;
user2->gid = user->gid;
user2->anonymous = user->anonymous;
Expand Down
3 changes: 1 addition & 2 deletions src/lib-storage/mail-user.h
Expand Up @@ -139,8 +139,7 @@ struct mail_user *mail_user_find(struct mail_user *user, const char *name);

/* Specify mail location %variable expansion data. */
void mail_user_set_vars(struct mail_user *user, const char *service,
const struct ip_addr *local_ip,
const struct ip_addr *remote_ip);
const struct mail_user_connection_data *conn);
/* Return %variable expansion table for the user. */
const struct var_expand_table *
mail_user_var_expand_table(struct mail_user *user);
Expand Down

0 comments on commit ff4ba03

Please sign in to comment.