@@ -43,6 +43,9 @@ ev_io pullio;
43
43
char * rootpath = NULL , * unprivpath = NULL ;
44
44
size_t rootpathlen = 0 , unprivpathlen = 0 ;
45
45
uid_t runas = 0 ;
46
+ #if ZMQ_VERSION_MAJOR > 3
47
+ char * curve_private = NULL , * curve_public = NULL , * curve_server = NULL ;
48
+ #endif
46
49
47
50
struct child_job {
48
51
json_t * input ;
@@ -512,7 +515,7 @@ void recv_job_cb(struct ev_loop * loop, ev_io * i, int event) {
512
515
zmq_msg_t inmsg ;
513
516
#if ZMQ_VERSION_MAJOR == 2
514
517
int64_t rcvmore = 0 ;
515
- #elif ZMQ_VERSION_MAJOR = = 3
518
+ #elif ZMQ_VERSION_MAJOR > = 3
516
519
int rcvmore = 0 ;
517
520
#endif
518
521
size_t rms = sizeof (rcvmore );
@@ -549,13 +552,35 @@ void parse_sock_directive(void * socket, json_t * arg, int bind) {
549
552
zmq_bind (socket , json_string_value (arg ));
550
553
else
551
554
zmq_connect (socket , json_string_value (arg ));
555
+ #if ZMQ_VERSION_MAJOR > 3
556
+ if (curve_private ) {
557
+ zmq_setsockopt (socket , ZMQ_CURVE_SECRETKEY ,
558
+ curve_private , strlen (curve_private ));
559
+ zmq_setsockopt (socket , ZMQ_CURVE_PUBLICKEY ,
560
+ curve_public , strlen (curve_public ));
561
+ zmq_setsockopt (socket , ZMQ_CURVE_SERVERKEY ,
562
+ curve_server , strlen (curve_server ));
563
+ }
564
+ #endif
552
565
} else if (json_is_object (arg )) {
553
566
char * addr = NULL ;
554
567
json_t * subscribe = NULL ;
555
568
if (json_unpack (arg , "{s:s s?:b s?:o}" ,
556
569
"address" , & addr , "bind" , & bind , "subscribe" ,
557
570
& subscribe ) != 0 )
558
571
return ;
572
+
573
+ #if ZMQ_VERSION_MAJOR > 3
574
+ if (curve_private ) {
575
+ zmq_setsockopt (socket , ZMQ_CURVE_SECRETKEY ,
576
+ curve_private , strlen (curve_private ));
577
+ zmq_setsockopt (socket , ZMQ_CURVE_PUBLICKEY ,
578
+ curve_public , strlen (curve_public ));
579
+ zmq_setsockopt (socket , ZMQ_CURVE_SERVERKEY ,
580
+ curve_server , strlen (curve_server ));
581
+ }
582
+ #endif
583
+
559
584
if (bind )
560
585
zmq_bind (socket , addr );
561
586
else
@@ -610,6 +635,7 @@ int main(int argc, char ** argv) {
610
635
json_error_t config_err ;
611
636
char ch , * configobj = "executor" , * tmprootpath = NULL ,
612
637
* tmpunprivpath = NULL , * tmpunprivuser = NULL ;
638
+ json_error_t jsonerr ;
613
639
614
640
while ((ch = getopt (argc , argv , "vsdhc:" )) != -1 ) {
615
641
switch (ch ) {
@@ -657,15 +683,31 @@ int main(int argc, char ** argv) {
657
683
exit (1 );
658
684
}
659
685
660
- if (json_unpack (config , "{s:{s?:o s:o s?i s?b s?b s?:o s?o s?s s?s s?s}}" ,
686
+ #if ZMQ_VERSION_MAJOR < 4
687
+ if (json_unpack_ex (config , & jsonerr , 0 ,
688
+ "{s:{s?:o s:o s?i s?b s?b s?:o s?o s?s s?s s?s}}" ,
661
689
configobj , "jobs" , & jobs , "results" , & results ,
662
690
"iothreads" , & iothreads , "verbose" , & verbose ,
663
691
"syslog" , & usesyslog , "filter" , & filter ,
664
692
"publisher" , & publisher , "rootpath" , & tmprootpath ,
665
693
"unprivpath" , & tmpunprivpath , "unprivuser" , & tmpunprivuser ) != 0 ) {
666
- logit (ERR , "Error getting config" );
694
+ logit (ERR , "Error getting config %s" , jsonerr . text );
667
695
exit (-1 );
668
696
}
697
+ #else
698
+ if (json_unpack_ex (config , & jsonerr , 0 ,
699
+ "{s:{s?:o s:o s?i s?b s?b s?:o s?o s?s s?s s?s s?{s:s s:s s:s}}}" ,
700
+ configobj , "jobs" , & jobs , "results" , & results ,
701
+ "iothreads" , & iothreads , "verbose" , & verbose ,
702
+ "syslog" , & usesyslog , "filter" , & filter ,
703
+ "publisher" , & publisher , "rootpath" , & tmprootpath ,
704
+ "unprivpath" , & tmpunprivpath , "unprivuser" , & tmpunprivuser ,
705
+ "curve" , "publickey" , & curve_public , "privatekey" , & curve_private ,
706
+ "serverkey" , & curve_server ) != 0 ) {
707
+ logit (ERR , "Error getting config: %s" , jsonerr .text );
708
+ exit (-1 );
709
+ }
710
+ #endif
669
711
670
712
parse_filter (filter ,0 );
671
713
@@ -697,6 +739,15 @@ int main(int argc, char ** argv) {
697
739
runas = pwdent -> pw_uid ;
698
740
}
699
741
742
+ #if ZMQ_VERSION_MAJOR > 3
743
+ if (curve_public )
744
+ curve_public = strdup (curve_public );
745
+ if (curve_private )
746
+ curve_private = strdup (curve_private );
747
+ if (curve_server )
748
+ curve_server = strdup (curve_server );
749
+ #endif
750
+
700
751
zmqctx = zmq_init (iothreads );
701
752
if (zmqctx == NULL )
702
753
exit (-1 );
0 commit comments