diff -r e554f3d72d9e -r 067ea2315a8a dav/main.c --- a/dav/main.c Tue Dec 12 23:58:54 2017 +0100 +++ b/dav/main.c Mon Dec 18 11:56:11 2017 +0100 @@ -239,15 +239,9 @@ fprintf(stderr, "\n"); } -int request_auth(Repository *repo, DavSession *sn, CmdArgs *a) { - if(cmd_getoption(a, "noinput")) { - return 0; - } - - static int login = 0; - if(login) { - return 0; - } + +int request_auth2(DavSession *sn, void *userdata) { + Repository *repo = userdata; char *user = NULL; char ubuf[256]; @@ -274,8 +268,8 @@ dav_session_set_auth(sn, user, password); free(password); - login = 1; - return 1; + + return 0; } static Repository* url2repo(char *url, char **path) { @@ -374,6 +368,9 @@ curl_easy_setopt(sn->handle, CURLOPT_SSL_VERIFYPEER, 0); curl_easy_setopt(sn->handle, CURLOPT_SSL_VERIFYHOST, 0); } + if(!cmd_getoption(a, "noinput")) { + dav_session_set_authcallback(sn, request_auth2, repo); + } return sn; } @@ -405,25 +402,13 @@ int depth = cmd_getoption(a, "recursive") ? -1 : 1; int ret = -1; - DavResource *ls; - while(ret != 0) { - ls = dav_query( - sn, - date ? LIST_QUERY_ORDER_BY_DATE : LIST_QUERY_ORDER_BY_NAME, - path, - depth, - t); - - if(!ls) { - if(sn->error == DAV_UNAUTHORIZED) { - if(request_auth(repo, sn, a)) { - continue; - } - } - print_resource_error(sn, path); - break; - } - + DavResource *ls = dav_query( + sn, + date ? LIST_QUERY_ORDER_BY_DATE : LIST_QUERY_ORDER_BY_NAME, + path, + depth, + t); + if(ls) { // parameters void (*print_func)(DavResource*, char *, CmdArgs *); if(cmd_getoption(a, "list") || cmd_getoption(a, "extended")) { @@ -437,9 +422,8 @@ print_func(child, path, a); child = child->next; } - - // leave loop - ret = 0; + } else { + print_resource_error(sn, path); } free(path); @@ -689,21 +673,12 @@ DavResource *res; int depth = recursive ? -1 : 1; - for(int i=0;i<2;i++) { - res = dav_query( - sn, - "select - from %s with depth = %d where iscollection or lastmodified > %t", - path, - depth, - t); - if(!res && sn->error == DAV_UNAUTHORIZED) { - if(request_auth(repo, sn, a)) { - continue; - } - } - break; - } - + res = dav_query( + sn, + "select - from %s with depth = %d where iscollection or lastmodified > %t", + path, + depth, + t); if(!res) { print_resource_error(sn, path); return -1; @@ -1059,16 +1034,7 @@ return -1; } - DavResource *col = NULL; - for(int i=0;i<2;i++) { - col = dav_query(sn, "select - from %s", path); - if(!col && sn->error == DAV_UNAUTHORIZED) { - if(request_auth(repo, sn, a)) { - continue; - } - } - break; - } + DavResource *col = dav_query(sn, "select - from %s", path); if(!col) { if(sn->error == DAV_NOT_FOUND) { col = dav_resource_new(sn, path); @@ -1137,16 +1103,7 @@ } int put_file(Repository *repo, CmdArgs *a, DavSession *sn, char *path, char *name, FILE *in, off_t len) { - DavResource *res = NULL; - for(int i=0;i<2;i++) { - res = dav_query(sn, "select - from %s", path); - if(!res && sn->error == DAV_UNAUTHORIZED) { - if(request_auth(repo, sn, a)) { - continue; - } - } - break; - } + DavResource *res = dav_query(sn, "select - from %s", path); if(!res) { if(sn->error == DAV_NOT_FOUND) { @@ -1220,17 +1177,7 @@ return -1; } - int err = 0; - for(int i=0;i<2;i++) { - err = dav_delete(res); - if(err && sn->error == DAV_UNAUTHORIZED && request_auth(repo, sn, a)) { - continue; - } else { - break; - } - } - - if(err) { + if(dav_delete(res)) { print_resource_error(sn, res->path); fprintf(stderr, "Cannot delete resource.\n"); return -1; @@ -1278,17 +1225,7 @@ } res->iscollection = 1; - int err = 0; - for(int i=0;i<2;i++) { - err = dav_create(res); - if(err && sn->error == DAV_UNAUTHORIZED && request_auth(repo, sn, a)) { - continue; - } else { - break; - } - } - - if(err) { + if(dav_create(res)) { print_resource_error(sn, res->path); fprintf(stderr, "Cannot create collection.\n"); return -1; @@ -1444,15 +1381,9 @@ } DavResource *res = dav_resource_new(sn, path); - for(int i=0;i<2;i++) { - if(dav_load_prop(res, &propname, 1)) { - if(i == 0 && sn->error == DAV_UNAUTHORIZED && request_auth(repo, sn, a)) { - continue; - } - print_resource_error(sn, res->path); - return -1; - } - break; + if(dav_load_prop(res, &propname, 1)) { + print_resource_error(sn, res->path); + return -1; } free(path); @@ -1498,14 +1429,9 @@ set_session_lock(sn, a); DavResource *res = dav_resource_new(sn, path); - for(int i=0;i<2;i++) { - if(!dav_exists(res)) { - if(i == 0 && sn->error == DAV_UNAUTHORIZED && request_auth(repo, sn, a)) { - continue; - } - print_resource_error(sn, res->path); - return -1; - } + if(!dav_exists(res)) { + print_resource_error(sn, res->path); + return -1; } char *namespace = cmd_getoption(a, "namespace"); @@ -1519,16 +1445,10 @@ } int ret = 0; - for(int i=0;i<2;i++) { - if(dav_store(res)) { - if(i == 0 && sn->error == DAV_UNAUTHORIZED && request_auth(repo, sn, a)) { - continue; - } - print_resource_error(sn, res->path); - fprintf(stderr, "Cannot set property.\n"); - ret = -1; - } - break; + if(dav_store(res)) { + print_resource_error(sn, res->path); + fprintf(stderr, "Cannot set property.\n"); + ret = -1; } free(path); @@ -1565,16 +1485,11 @@ int ret = 0; DavResource *res = dav_resource_new(sn, path); dav_remove_property_ns(res, propname.ns, propname.name); - for(int i=0;i<2;i++) { - if(dav_store(res)) { - if(i == 0 && sn->error == DAV_UNAUTHORIZED && request_auth(repo, sn, a)) { - continue; - } - print_resource_error(sn, res->path); - fprintf(stderr, "Cannot set property.\n"); - ret = -1; - } - break; + + if(dav_store(res)) { + print_resource_error(sn, res->path); + fprintf(stderr, "Cannot set property.\n"); + ret = -1; } free(path); @@ -1609,13 +1524,7 @@ } DavResource *res = dav_resource_new(sn, path); - for(int i=0;i<2;i++) { - if(!dav_lock_t(res, timeout)) { - break; - } - if(i == 0 && sn->error == DAV_UNAUTHORIZED && request_auth(repo, sn, a)) { - continue; - } + if(dav_lock_t(res, timeout)) { print_resource_error(sn, res->path); return -1; } @@ -1686,16 +1595,9 @@ int ret = 0; DavResource *res = dav_resource_new(sn, path); - for(int i=0;i<2;i++) { - if(!dav_unlock(res)) { - break; - } - if(i == 0 && sn->error == DAV_UNAUTHORIZED && request_auth(repo, sn, a)) { - continue; - } + if(dav_unlock(res)) { print_resource_error(sn, res->path); ret = -1; - break; } dav_session_destroy(sn); @@ -1729,57 +1631,52 @@ } DavResource *res = dav_resource_new(sn, path); - for(int i=0;i<2;i++) { - if(!dav_load(res)) { - printf("name: %s\n", res->name); - printf("path: %s\n", res->path); + if(!dav_load(res)) { + printf("name: %s\n", res->name); + printf("path: %s\n", res->path); + + char *server = util_url_base(sn->base_url); + char *url = util_concat_path(server, res->href); + printf("url: %s\n", url); + free(url); + free(server); - char *server = util_url_base(sn->base_url); - char *url = util_concat_path(server, res->href); - printf("url: %s\n", url); - free(url); - free(server); + if(res->iscollection) { + printf("type: collection\n"); + printf("size: %d\n", count_children(res)); + } else { + printf("type: resource\n"); + char *len = ls_size_str(res); + printf("size: %s\n", len); + free(len); + } - if(res->iscollection) { - printf("type: collection\n"); - printf("size: %d\n", count_children(res)); - } else { - printf("type: resource\n"); - char *len = ls_size_str(res); - printf("size: %s\n", len); - free(len); + size_t count = 0; + DavPropName *properties = dav_get_property_names(res, &count); + + char *last_ns = NULL; + for(int i=0;ierror == DAV_UNAUTHORIZED && request_auth(repo, sn, a)) { - continue; - } - print_resource_error(sn, res->path); - break; - } + dav_session_free(sn, properties); + return 0; + } else { + print_resource_error(sn, res->path); } + return -1; }