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 } |