static void cmd_acl_get_right(const struct acl_rights *rights) { string_t *str; doveadm_print(acl_rights_get_id(rights)); if (rights->global) doveadm_print("global"); else doveadm_print(""); str = t_str_new(256); if (rights->rights != NULL) str_append(str, t_strarray_join(rights->rights, " ")); if (rights->neg_rights != NULL) { if (str_len(str) > 0) str_append_c(str, ' '); str_append_c(str, '-'); str_append(str, t_strarray_join(rights->neg_rights, " -")); } doveadm_print(str_c(str)); }
int acl_mailbox_update_acl(struct mailbox_transaction_context *t, const struct acl_rights_update *update) { struct acl_object *aclobj; const char *key; time_t ts = update->last_change != 0 ? update->last_change : ioloop_time; key = t_strdup_printf(MAILBOX_ATTRIBUTE_PREFIX_ACL"%s", acl_rights_get_id(&update->rights)); aclobj = acl_mailbox_get_aclobj(t->box); if (acl_object_update(aclobj, update) < 0) { mail_storage_set_critical(t->box->storage, "Failed to set ACL"); return -1; } /* FIXME: figure out some value lengths, so maybe some day quota could apply to ACLs as well. */ if (acl_mailbox_update_removed_id(aclobj, update)) mail_index_attribute_unset(t->itrans, FALSE, key, ts); else mail_index_attribute_set(t->itrans, FALSE, key, ts, 0); return 0; }