391 | SYNC_CMD_ARCHIVE | SYNC_CMD_RESTORE; |
391 | SYNC_CMD_ARCHIVE | SYNC_CMD_RESTORE; |
392 bool backuppull = false; |
392 bool backuppull = false; |
393 bool lockpull = false; |
393 bool lockpull = false; |
394 bool lockpush = false; |
394 bool lockpush = false; |
395 bool hashing = false; |
395 bool hashing = false; |
396 bool detect_copy = false; |
396 //bool detect_copy = false; |
397 time_t lock_timeout = 0; |
397 time_t lock_timeout = 0; |
398 uint32_t metadata = 0; |
398 uint32_t metadata = 0; |
|
399 uint32_t symlink = 0; |
399 |
400 |
400 unsigned short parentlineno = node->line; |
401 unsigned short parentlineno = node->line; |
401 node = node->children; |
402 node = node->children; |
402 while(node) { |
403 while(node) { |
403 if(node->type == XML_ELEMENT_NODE) { |
404 if(node->type == XML_ELEMENT_NODE) { |
487 print_warning(node->line, "integer value " |
488 print_warning(node->line, "integer value " |
488 "expected in <lock-timeout> element\n"); |
489 "expected in <lock-timeout> element\n"); |
489 } |
490 } |
490 } else if(xstreq(node->name, "hashing")) { |
491 } else if(xstreq(node->name, "hashing")) { |
491 hashing = util_getboolean(value); |
492 hashing = util_getboolean(value); |
|
493 } else if(xstreq(node->name, "symlinks")) { |
|
494 uint32_t symlinkconfig = 0; |
|
495 const char *delims = " ,\r\n"; |
|
496 char *cmdstr = strdup(value); |
|
497 char *s = strtok(cmdstr, delims); |
|
498 while(s) { |
|
499 if(!strcmp(s, "sync")) { |
|
500 symlinkconfig |= SYNC_SYMLINK_SYNC; |
|
501 } else if(!strcmp(s, "extern_nofollow")) { |
|
502 symlinkconfig |= SYNC_SYMLINK_EXTERN_NOFOLLOW; |
|
503 } else if(!strcmp(s, "intern_nofollow")) { |
|
504 symlinkconfig |= SYNC_SYMLINK_INTERN_NOFOLLOW; |
|
505 } |
|
506 s = strtok(NULL, delims); |
|
507 } |
|
508 free(cmdstr); |
|
509 symlink = symlinkconfig; |
492 } else { |
510 } else { |
493 print_error(node->line, |
511 print_error(node->line, |
494 "unknown directory config element: %s\n", node->name); |
512 "unknown directory config element: %s\n", node->name); |
495 return 1; |
513 return 1; |
496 } |
514 } |
533 dir->lockpush = lockpush; |
551 dir->lockpush = lockpush; |
534 dir->hashing = hashing; |
552 dir->hashing = hashing; |
535 dir->lock_timeout = lock_timeout; |
553 dir->lock_timeout = lock_timeout; |
536 dir->metadata = metadata; |
554 dir->metadata = metadata; |
537 dir->splitconfig = splitconfig; |
555 dir->splitconfig = splitconfig; |
538 dir->symlink = SYNC_SYMLINK_STORE; // TODO: add config elements |
556 dir->symlink = symlink; |
539 if((metadata & FINFO_MODE) == FINFO_MODE) { |
557 if((metadata & FINFO_MODE) == FINFO_MODE) { |
540 dir->db_settings = DB_STORE_MODE; |
558 dir->db_settings = DB_STORE_MODE; |
541 } |
559 } |
542 if((metadata & FINFO_OWNER) == FINFO_OWNER) { |
560 if((metadata & FINFO_OWNER) == FINFO_OWNER) { |
543 dir->db_settings |= DB_STORE_OWNER; |
561 dir->db_settings |= DB_STORE_OWNER; |