@@ -902,49 +902,6 @@ bind8_stats (struct nsd *nsd)
902
902
}
903
903
#endif /* BIND8_STATS */
904
904
905
- static
906
- int cookie_secret_file_read (nsd_type * nsd ) {
907
- cookie_secret_type cookie_secrets [NSD_COOKIE_HISTORY_SIZE ];
908
- char secret [NSD_COOKIE_SECRET_SIZE * 2 + 2 /*'\n' and '\0'*/ ];
909
- char const * file = nsd -> options -> cookie_secret_file
910
- ? nsd -> options -> cookie_secret_file : COOKIESECRETSFILE ;
911
- FILE * f ;
912
- size_t count = 0 ;
913
-
914
- f = fopen (file , "r" );
915
- /* a non-existing cookie file is not an error */
916
- if ( f == NULL ) { return errno != EPERM ; }
917
- /* cookie secret file exists and is readable */
918
- for ( count = 0 ; count < NSD_COOKIE_HISTORY_SIZE ; count ++ ) {
919
- size_t secret_len = 0 ;
920
- ssize_t decoded_len = 0 ;
921
- if ( fgets (secret , sizeof (secret ), f ) == NULL ) { break ; }
922
- secret_len = strlen (secret );
923
- if ( secret_len == 0 ) { break ; }
924
- assert ( secret_len <= sizeof (secret ) );
925
- secret_len = secret [secret_len - 1 ] == '\n' ? secret_len - 1 : secret_len ;
926
- if ( secret_len != NSD_COOKIE_SECRET_SIZE * 2 ) {
927
- fclose (f );
928
- return 0 ;
929
- }
930
- /* needed for `hex_pton`; stripping potential `\n` */
931
- secret [secret_len ] = '\0' ;
932
- decoded_len = hex_pton (secret , cookie_secrets [count ].cookie_secret ,
933
- NSD_COOKIE_SECRET_SIZE );
934
- if ( decoded_len != NSD_COOKIE_SECRET_SIZE ) {
935
- fclose (f );
936
- return 0 ;
937
- }
938
- }
939
- fclose (f );
940
- if (count && nsd -> cookie_secrets_source <= COOKIE_SECRETS_FROM_FILE ) {
941
- nsd -> cookie_count = count ;
942
- memcpy (nsd -> cookie_secrets , cookie_secrets , sizeof (cookie_secrets ));
943
- nsd -> cookie_secrets_source = COOKIE_SECRETS_FROM_FILE ;
944
- }
945
- return 1 ;
946
- }
947
-
948
905
extern char * optarg ;
949
906
extern int optind ;
950
907
@@ -986,6 +943,7 @@ main(int argc, char *argv[])
986
943
nsd .chrootdir = 0 ;
987
944
nsd .nsid = NULL ;
988
945
nsd .nsid_len = 0 ;
946
+ nsd .do_answer_cookie = 0 ;
989
947
nsd .cookie_count = 0 ;
990
948
nsd .cookie_secrets_source = COOKIE_SECRETS_NONE ;
991
949
@@ -994,7 +952,6 @@ main(int argc, char *argv[])
994
952
nsd .current_tcp_count = 0 ;
995
953
nsd .file_rotation_ok = 0 ;
996
954
997
- nsd .do_answer_cookie = 1 ;
998
955
999
956
/* Set up our default identity to gethostname(2) */
1000
957
if (gethostname (hostname , MAXHOSTNAMELEN ) == 0 ) {
@@ -1271,43 +1228,7 @@ main(int argc, char *argv[])
1271
1228
#endif /* IPV6 MTU) */
1272
1229
#endif /* defined(INET6) */
1273
1230
1274
- nsd .do_answer_cookie = nsd .options -> answer_cookie ;
1275
- if (nsd .options -> cookie_secret ) {
1276
- ssize_t len = hex_pton (nsd .options -> cookie_secret ,
1277
- nsd .cookie_secrets [0 ].cookie_secret ,
1278
- NSD_COOKIE_SECRET_SIZE );
1279
- if (len != NSD_COOKIE_SECRET_SIZE ) {
1280
- error ("A cookie secret must be a 128 bit hex string" );
1281
- }
1282
- nsd .cookie_count = 1 ;
1283
- nsd .cookie_secrets_source = COOKIE_SECRETS_FROM_CONFIG ;
1284
- if (nsd .options -> cookie_staging_secret ) {
1285
- len = hex_pton (nsd .options -> cookie_staging_secret ,
1286
- nsd .cookie_secrets [1 ].cookie_secret ,
1287
- NSD_COOKIE_SECRET_SIZE );
1288
- if (len != NSD_COOKIE_SECRET_SIZE ) {
1289
- error ("A (staging) cookie secret must be a "
1290
- "128 bit hex string" );
1291
- } else
1292
- nsd .cookie_count = 2 ;
1293
- }
1294
- } else {
1295
- size_t j ;
1296
- size_t const cookie_secret_len = NSD_COOKIE_SECRET_SIZE ;
1297
- /* Calculate a new random secret */
1298
- srandom (getpid () ^ time (NULL ));
1299
-
1300
- for ( j = 0 ; j < NSD_COOKIE_HISTORY_SIZE ; j ++ ) {
1301
- #if defined(HAVE_SSL )
1302
- if (!RAND_status ()
1303
- || !RAND_bytes (nsd .cookie_secrets [j ].cookie_secret , cookie_secret_len ))
1304
- #endif
1305
- for (i = 0 ; i < cookie_secret_len ; i ++ )
1306
- nsd .cookie_secrets [j ].cookie_secret [i ] = random_generate (256 );
1307
- }
1308
- nsd .cookie_count = 1 ;
1309
- nsd .cookie_secrets_source = COOKIE_SECRETS_GENERATED ;
1310
- }
1231
+ reconfig_cookies (& nsd , nsd .options );
1311
1232
1312
1233
if (nsd .nsid_len == 0 && nsd .options -> nsid ) {
1313
1234
if (strlen (nsd .options -> nsid ) % 2 != 0 ) {
@@ -1610,11 +1531,6 @@ main(int argc, char *argv[])
1610
1531
}
1611
1532
#endif /* HAVE_SSL */
1612
1533
1613
- if (nsd .cookie_secrets_source < COOKIE_SECRETS_FROM_FILE
1614
- && (!nsd .options -> cookie_secret_file || nsd .options -> cookie_secret_file [0 ])
1615
- && !cookie_secret_file_read (& nsd ) ) {
1616
- log_msg (LOG_ERR , "cookie secret file corrupt or not readable" );
1617
- }
1618
1534
/* Unless we're debugging, fork... */
1619
1535
if (!nsd .debug ) {
1620
1536
int fd ;
0 commit comments