dav/main.c

changeset 29
938957a4eea7
parent 28
4e46c65711ef
child 30
9a5a7a513a96
equal deleted inserted replaced
28:4e46c65711ef 29:938957a4eea7
86 !strcasecmp(cmd, "delete")) 86 !strcasecmp(cmd, "delete"))
87 { 87 {
88 ret = cmd_remove(args); 88 ret = cmd_remove(args);
89 } else if(!strcasecmp(cmd, "mkdir") || !strcasecmp(cmd, "mkcol")) { 89 } else if(!strcasecmp(cmd, "mkdir") || !strcasecmp(cmd, "mkcol")) {
90 ret = cmd_mkdir(args); 90 ret = cmd_mkdir(args);
91 } else if(!strcasecmp(cmd, "date")) {
92 ret = cmd_date(args);
91 } else { 93 } else {
92 print_usage(argv[0]); 94 print_usage(argv[0]);
93 } 95 }
94 dav_context_destroy(ctx); 96 dav_context_destroy(ctx);
95 97
102 fprintf(stderr, " list [-altR] <url>\n"); 104 fprintf(stderr, " list [-altR] <url>\n");
103 fprintf(stderr, " get [-pR] [-k <key>] [-o <file>] <url>\n"); 105 fprintf(stderr, " get [-pR] [-k <key>] [-o <file>] <url>\n");
104 fprintf(stderr, " put [-p] [-k <key>] <url> <file>\n"); 106 fprintf(stderr, " put [-p] [-k <key>] <url> <file>\n");
105 fprintf(stderr, " mkdir <url>\n"); 107 fprintf(stderr, " mkdir <url>\n");
106 fprintf(stderr, " remove <url>\n"); 108 fprintf(stderr, " remove <url>\n");
109 fprintf(stderr, " date [url]\n");
107 fprintf(stderr, "\n"); 110 fprintf(stderr, "\n");
108 fprintf(stderr, "Options:\n"); 111 fprintf(stderr, "Options:\n");
109 fprintf(stderr, 112 fprintf(stderr,
110 " -k <key> Key to use for encryption or decryption\n"); 113 " -k <key> Key to use for encryption or decryption\n");
111 fprintf(stderr, " -p Don't encrypt or decrypt files\n"); 114 fprintf(stderr, " -p Don't encrypt or decrypt files\n");
783 return -1; 786 return -1;
784 } 787 }
785 788
786 return 0; 789 return 0;
787 } 790 }
791
792
793 static size_t get_date_header_cb(void *header, int s, int n, void *data) {
794 char **date_str = (char**)data;
795
796 //printf("header: %.*s\n", s*n, header);
797 sstr_t h = sstrn(header, s*n);
798 if(sstrprefix(h, S("Date:"))) {
799 sstr_t v = sstrsubs(h, 5);
800 v = sstrdup(sstrtrim(v));
801 *date_str = v.ptr;
802 }
803 return s*n;
804 }
805
806 int cmd_date(CmdArgs *a) {
807 if(a->argc < 1) {
808 time_t now = time(NULL);
809 struct tm *date = gmtime(&now);
810 char str[32];
811 putenv("LC_TIME=C");
812 size_t len = strftime(str, 32, "%a, %d %b %Y %H:%M:%S GMT\n", date);
813 fwrite(str, 1, len, stdout);
814 } else {
815 DavSession *sn = NULL;
816 char *url = a->argv[0];
817 char *root = NULL;
818 char *path = NULL;
819 url_get_parts(url, &root, &path);
820
821 Repository *repo = get_repository(root);
822 if(repo) {
823 sn = dav_session_new_auth(ctx, repo->url, repo->user, repo->password);
824 } else {
825 sn = dav_session_new(ctx, root);
826 }
827
828 DavResource *res = dav_resource_new(sn, path);
829 char *date = NULL;
830 curl_easy_setopt(sn->handle, CURLOPT_HEADERFUNCTION, get_date_header_cb);
831 curl_easy_setopt(sn->handle, CURLOPT_WRITEHEADER, &date);
832 if(dav_exists(res) && date) {
833 printf("%s\n", date);
834 } else {
835 return -1;
836 }
837 }
838 return 0;
839 }

mercurial