Only in knot-1.4.0-rc1/man: kdig.1
Only in knot-1.4.0-rc1/man: khost.1
Only in knot-1.4.0-rc1/man: knotc.8
Only in knot-1.4.0-rc1/man: knot.conf.5
Only in knot-1.4.0-rc1/man: knotd.8
Only in knot-1.4.0-rc1/man: knsec3hash.1
Only in knot-1.4.0-rc1/man: knsupdate.1
diff -r knot-1.4.0-rc1/src/knot/conf/cf-parse.y knot-1.4.0-rc1.sopak/src/knot/conf/cf-parse.y
931a932,933
>  | zone STORAGE TEXT ';' { this_zone->storage = $3.t; }
>  | zone DNSSEC_KEYDIR TEXT ';' { this_zone->dnssec_keydir = $3.t; }
diff -r knot-1.4.0-rc1/src/knot/conf/conf.c knot-1.4.0-rc1.sopak/src/knot/conf/conf.c
324c324
< 		if (!conf->dnssec_keydir) {
---
> 		if (!conf->dnssec_keydir && !zone->dnssec_keydir) {
325a326,327
> 		}else if(conf->dnssec_keydir && !zone->dnssec_keydir){
> 			zone->dnssec_keydir = conf->dnssec_keydir;
347,348c349,362
< 		// Relative zone filenames should be relative to storage
< 		zone->file = conf_abs_path(conf->storage, zone->file);
---
> 		// Default storage directory, if differs we do not check  existence of storage dir for performance reason, it should be done by admin, there sorry for segfault
> 		if(zone->storage == NULL){
> 			zone->storage = conf->storage;
> 		}
> 
> 		// Relative zone->storage filenames should be relative to conf->storage
> 		zone->storage = conf_abs_path(conf->storage, zone->storage);
> 		if (zone->storage == NULL) {
> 			ret = KNOT_ENOMEM;
> 			continue;
> 		}
> 
> 		// Relative zone filenames should be relative to zone->storage
> 		zone->file = conf_abs_path(zone->storage, zone->file);
353a368,374
> 		// Relative dnssec_keydir should be relative to zone->storage
> 		zone->dnssec_keydir = conf_abs_path(zone->storage, zone->dnssec_keydir);
> 		if (zone->dnssec_keydir == NULL) {
> 			ret = KNOT_ENOMEM;
> 			continue;
> 		}
> 
356c377
< 		size_t stor_len = strlen(conf->storage);
---
> 		size_t stor_len = strlen(zone->storage);
366c387
< 		memcpy(dpos, conf->storage, stor_len + 1);
---
> 		memcpy(dpos, zone->storage, stor_len + 1);
368c389
< 		if (conf->storage[stor_len - 1] != '/') {
---
> 		if (zone->storage[stor_len - 1] != '/') {
diff -r knot-1.4.0-rc1/src/knot/conf/conf.h knot-1.4.0-rc1.sopak/src/knot/conf/conf.h
119a120,121
> 	char *dnssec_keydir;       /*!< Path to a dnssec key dir per zone. */
> 	char *storage;             /*!< Path to a storage dir per zone. */
Only in knot-1.4.0-rc1/src/knot/conf: libknotd_la-cf-lex.c
Only in knot-1.4.0-rc1/src/knot/conf: libknotd_la-cf-parse.c
Only in knot-1.4.0-rc1/src/knot/conf: libknotd_la-cf-parse.h
diff -r knot-1.4.0-rc1/src/libknot/dnssec/zone-events.c knot-1.4.0-rc1.sopak/src/libknot/dnssec/zone-events.c
59a60,62
> 	// get conf zone, for dnssec_keydir
> 	conf_zone_t *zone_config = ((zonedata_t *)knot_zone_data(zone))->conf;
> 
62c65
< 	int result = knot_load_zone_keys(conf()->dnssec_keydir,
---
> 	int result = knot_load_zone_keys(zone_config->dnssec_keydir,
Only in knot-1.4.0-rc1/src/zscanner: scanner.c
