396 bool store_hash = false; |
396 bool store_hash = false; |
397 //bool detect_copy = false; |
397 //bool detect_copy = false; |
398 time_t lock_timeout = 0; |
398 time_t lock_timeout = 0; |
399 uint32_t metadata = 0; |
399 uint32_t metadata = 0; |
400 uint32_t symlink = 0; |
400 uint32_t symlink = 0; |
|
401 PushStrategy pushstrat = PUSH_STRATEGY_METADATA; |
401 |
402 |
402 unsigned short parentlineno = node->line; |
403 unsigned short parentlineno = node->line; |
403 node = node->children; |
404 node = node->children; |
404 while(node) { |
405 while(node) { |
405 if(node->type == XML_ELEMENT_NODE) { |
406 if(node->type == XML_ELEMENT_NODE) { |
455 print_warning(node->line, "unsigned integer value " |
456 print_warning(node->line, "unsigned integer value " |
456 "expected in <max-retry> element\n"); |
457 "expected in <max-retry> element\n"); |
457 } |
458 } |
458 } else if(xstreq(node->name, "allow-cmd")) { |
459 } else if(xstreq(node->name, "allow-cmd")) { |
459 int cmds = 0; |
460 int cmds = 0; |
460 const char *delims = " ,\r\n"; |
461 const char *delims = " ,\t\r\n"; |
461 char *cmdstr = strdup(value); |
462 char *cmdstr = strdup(value); |
462 char *cmd = strtok(cmdstr, delims); |
463 char *cmd = strtok(cmdstr, delims); |
463 while(cmd) { |
464 while(cmd) { |
464 if(!strcmp(cmd, "pull")) { |
465 if(!strcmp(cmd, "pull")) { |
465 cmds |= SYNC_CMD_PULL; |
466 cmds |= SYNC_CMD_PULL; |
489 print_warning(node->line, "integer value " |
490 print_warning(node->line, "integer value " |
490 "expected in <lock-timeout> element\n"); |
491 "expected in <lock-timeout> element\n"); |
491 } |
492 } |
492 } else if(xstreq(node->name, "hashing")) { |
493 } else if(xstreq(node->name, "hashing")) { |
493 hashing = util_getboolean(value); |
494 hashing = util_getboolean(value); |
494 store_hash = hashing; // TODO: extra config for this? |
495 store_hash = hashing; |
|
496 } else if(xstreq(node->name, "push-strategy")) { |
|
497 if(value) { |
|
498 if(xstreq(value, "metadata")) { |
|
499 pushstrat = PUSH_STRATEGY_METADATA; |
|
500 } else if(xstreq(value, "hash")) { |
|
501 pushstrat = PUSH_STRATEGY_HASH; |
|
502 } |
|
503 } |
495 } else if(xstreq(node->name, "symlinks")) { |
504 } else if(xstreq(node->name, "symlinks")) { |
496 uint32_t symlinkconfig = 0; |
505 uint32_t symlinkconfig = 0; |
497 const char *delims = " ,\r\n"; |
506 const char *delims = " ,\r\n"; |
498 char *cmdstr = strdup(value); |
507 char *cmdstr = strdup(value); |
499 char *s = strtok(cmdstr, delims); |
508 char *s = strtok(cmdstr, delims); |
555 dir->store_hash = store_hash; |
564 dir->store_hash = store_hash; |
556 dir->lock_timeout = lock_timeout; |
565 dir->lock_timeout = lock_timeout; |
557 dir->metadata = metadata; |
566 dir->metadata = metadata; |
558 dir->splitconfig = splitconfig; |
567 dir->splitconfig = splitconfig; |
559 dir->symlink = symlink; |
568 dir->symlink = symlink; |
|
569 dir->push_strategy = pushstrat; |
560 if((metadata & FINFO_MODE) == FINFO_MODE) { |
570 if((metadata & FINFO_MODE) == FINFO_MODE) { |
561 dir->db_settings = DB_STORE_MODE; |
571 dir->db_settings = DB_STORE_MODE; |
562 } |
572 } |
563 if((metadata & FINFO_OWNER) == FINFO_OWNER) { |
573 if((metadata & FINFO_OWNER) == FINFO_OWNER) { |
564 dir->db_settings |= DB_STORE_OWNER; |
574 dir->db_settings |= DB_STORE_OWNER; |