2
Copyright (C) 2010- The University of Notre Dame
3
This software is distributed under the GNU General Public License.
4
See the file COPYING for details.
9
#include <stringtools.h>
14
int main(int argc, char** argv) {
15
struct hash_table *acls;
16
struct s3_acl_object *acl;
17
char *bucket, *filename, *handle, *aclstr, *id;
18
char remotename[FILENAME_MAX];
19
char owner[FILENAME_MAX];
21
unsigned char mask = 0;
23
s3_initialize(&argc, argv);
26
fprintf(stderr, "usage: s3setacl <bucket> [filename] <email | display name> [+|-]<acls>\n");
32
sprintf(remotename, "/%s", argv[2]);
33
filename = remotename;
42
acls = hash_table_create(0, NULL);
43
s3_getacl(bucket, filename, owner, acls, s3_userid(), s3_key());
45
hash_table_firstkey(acls);
46
while(hash_table_nextkey(acls, &id, (void**)&acl)) {
47
if(!strcmp(id, handle)) break;
49
if(!acl) acl = hash_table_lookup(acls, handle);
51
if(!acl && !strchr(handle, '@')) {
52
fprintf(stderr, "Error: invalid handle (%s)\n", handle);
56
if(!acl && aclstr[0] != '-') {
57
acl = malloc(sizeof(*acl));
58
acl->acl_type = S3_ACL_EMAIL;
60
acl->display_name = NULL;
61
hash_table_insert(acls, handle, acl);
65
fprintf(stderr, "aclstr: %s\n", aclstr);
66
for(i = strcspn(aclstr, "frwgs"); i < strlen(aclstr); i++) {
68
case 'f': mask = mask | S3_ACL_FULL_CONTROL; break;
69
case 'r': mask = mask | S3_ACL_READ; break;
70
case 'w': mask = mask | S3_ACL_WRITE; break;
71
case 'g': mask = mask | S3_ACL_READ_ACP; break;
72
case 's': mask = mask | S3_ACL_WRITE_ACP; break;
76
if(aclstr[0] == '+') {
77
acl->perm = acl->perm | mask;
78
} else if(aclstr[0] == '-') {
79
acl->perm = acl->perm & ~mask;
84
s3_setacl(bucket, filename, owner, acls, s3_userid(), s3_key());