| ︙ | | |
366
367
368
369
370
371
372
373
374
375
376
377
378
379
|
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
|
+
+
+
+
|
pktout = sftp_pkt_init(SSH_FXP_REALPATH);
sftp_pkt_adduint32(pktout, 0x123); /* request id */
sftp_pkt_addstring_start(pktout);
sftp_pkt_addstring_str(pktout, path);
sftp_send(pktout);
pktin = sftp_recv();
if (!pktin) {
fxp_internal_error("did not receive a valid SFTP packet\n");
return NULL;
}
id = sftp_pkt_getuint32(pktin);
if (id != 0x123) {
fxp_internal_error("request ID mismatch\n");
return NULL;
}
if (pktin->type == SSH_FXP_NAME) {
int count;
|
| ︙ | | |
410
411
412
413
414
415
416
417
418
419
420
421
422
423
|
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
|
+
+
+
+
|
pktout = sftp_pkt_init(SSH_FXP_OPEN);
sftp_pkt_adduint32(pktout, 0x567); /* request id */
sftp_pkt_addstring(pktout, path);
sftp_pkt_adduint32(pktout, type);
sftp_pkt_adduint32(pktout, 0); /* (FIXME) empty ATTRS structure */
sftp_send(pktout);
pktin = sftp_recv();
if (!pktin) {
fxp_internal_error("did not receive a valid SFTP packet\n");
return NULL;
}
id = sftp_pkt_getuint32(pktin);
if (id != 0x567) {
fxp_internal_error("request ID mismatch\n");
return NULL;
}
if (pktin->type == SSH_FXP_HANDLE) {
char *hstring;
|
| ︙ | | |
449
450
451
452
453
454
455
456
457
458
459
460
461
462
|
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
|
+
+
+
+
|
int id;
pktout = sftp_pkt_init(SSH_FXP_OPENDIR);
sftp_pkt_adduint32(pktout, 0x456); /* request id */
sftp_pkt_addstring(pktout, path);
sftp_send(pktout);
pktin = sftp_recv();
if (!pktin) {
fxp_internal_error("did not receive a valid SFTP packet\n");
return NULL;
}
id = sftp_pkt_getuint32(pktin);
if (id != 0x456) {
fxp_internal_error("request ID mismatch\n");
return NULL;
}
if (pktin->type == SSH_FXP_HANDLE) {
char *hstring;
|
| ︙ | | |
489
490
491
492
493
494
495
496
497
498
499
500
501
502
|
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
|
+
+
+
+
|
pktout = sftp_pkt_init(SSH_FXP_CLOSE);
sftp_pkt_adduint32(pktout, 0x789); /* request id */
sftp_pkt_addstring_start(pktout);
sftp_pkt_addstring_data(pktout, handle->hstring, handle->hlen);
sftp_send(pktout);
pktin = sftp_recv();
if (!pktin) {
fxp_internal_error("did not receive a valid SFTP packet\n");
return;
}
id = sftp_pkt_getuint32(pktin);
if (id != 0x789) {
fxp_internal_error("request ID mismatch\n");
return;
}
fxp_got_status(pktin);
sfree(handle->hstring);
|
| ︙ | | |
510
511
512
513
514
515
516
517
518
519
520
521
522
523
|
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
|
+
+
+
+
|
pktout = sftp_pkt_init(SSH_FXP_MKDIR);
sftp_pkt_adduint32(pktout, 0x234); /* request id */
sftp_pkt_addstring(pktout, path);
sftp_pkt_adduint32(pktout, 0); /* (FIXME) empty ATTRS structure */
sftp_send(pktout);
pktin = sftp_recv();
if (!pktin) {
fxp_internal_error("did not receive a valid SFTP packet\n");
return 0;
}
id = sftp_pkt_getuint32(pktin);
if (id != 0x234) {
fxp_internal_error("request ID mismatch\n");
return 0;
}
id = fxp_got_status(pktin);
if (id != 1) {
|
| ︙ | | |
532
533
534
535
536
537
538
539
540
541
542
543
544
545
|
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
|
+
+
+
+
|
int id;
pktout = sftp_pkt_init(SSH_FXP_RMDIR);
sftp_pkt_adduint32(pktout, 0x345); /* request id */
sftp_pkt_addstring(pktout, path);
sftp_send(pktout);
pktin = sftp_recv();
if (!pktin) {
fxp_internal_error("did not receive a valid SFTP packet\n");
return 0;
}
id = sftp_pkt_getuint32(pktin);
if (id != 0x345) {
fxp_internal_error("request ID mismatch\n");
return 0;
}
id = fxp_got_status(pktin);
if (id != 1) {
|
| ︙ | | |
554
555
556
557
558
559
560
561
562
563
564
565
566
567
|
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
|
+
+
+
+
|
int id;
pktout = sftp_pkt_init(SSH_FXP_REMOVE);
sftp_pkt_adduint32(pktout, 0x678); /* request id */
sftp_pkt_addstring(pktout, fname);
sftp_send(pktout);
pktin = sftp_recv();
if (!pktin) {
fxp_internal_error("did not receive a valid SFTP packet\n");
return 0;
}
id = sftp_pkt_getuint32(pktin);
if (id != 0x678) {
fxp_internal_error("request ID mismatch\n");
return 0;
}
id = fxp_got_status(pktin);
if (id != 1) {
|
| ︙ | | |
577
578
579
580
581
582
583
584
585
586
587
588
589
590
|
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
|
+
+
+
+
|
pktout = sftp_pkt_init(SSH_FXP_RENAME);
sftp_pkt_adduint32(pktout, 0x678); /* request id */
sftp_pkt_addstring(pktout, srcfname);
sftp_pkt_addstring(pktout, dstfname);
sftp_send(pktout);
pktin = sftp_recv();
if (!pktin) {
fxp_internal_error("did not receive a valid SFTP packet\n");
return 0;
}
id = sftp_pkt_getuint32(pktin);
if (id != 0x678) {
fxp_internal_error("request ID mismatch\n");
return 0;
}
id = fxp_got_status(pktin);
if (id != 1) {
|
| ︙ | | |
603
604
605
606
607
608
609
610
611
612
613
614
615
616
|
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
|
+
+
+
+
|
int id;
pktout = sftp_pkt_init(SSH_FXP_STAT);
sftp_pkt_adduint32(pktout, 0x678); /* request id */
sftp_pkt_addstring(pktout, fname);
sftp_send(pktout);
pktin = sftp_recv();
if (!pktin) {
fxp_internal_error("did not receive a valid SFTP packet\n");
return 0;
}
id = sftp_pkt_getuint32(pktin);
if (id != 0x678) {
fxp_internal_error("request ID mismatch\n");
return 0;
}
if (pktin->type == SSH_FXP_ATTRS) {
|
| ︙ | | |
629
630
631
632
633
634
635
636
637
638
639
640
641
642
|
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
|
+
+
+
+
|
pktout = sftp_pkt_init(SSH_FXP_FSTAT);
sftp_pkt_adduint32(pktout, 0x678); /* request id */
sftp_pkt_addstring_start(pktout);
sftp_pkt_addstring_data(pktout, handle->hstring, handle->hlen);
sftp_send(pktout);
pktin = sftp_recv();
if (!pktin) {
fxp_internal_error("did not receive a valid SFTP packet\n");
return 0;
}
id = sftp_pkt_getuint32(pktin);
if (id != 0x678) {
fxp_internal_error("request ID mismatch\n");
return 0;
}
if (pktin->type == SSH_FXP_ATTRS) {
|
| ︙ | | |
658
659
660
661
662
663
664
665
666
667
668
669
670
671
|
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
|
+
+
+
+
|
pktout = sftp_pkt_init(SSH_FXP_SETSTAT);
sftp_pkt_adduint32(pktout, 0x678); /* request id */
sftp_pkt_addstring(pktout, fname);
sftp_pkt_addattrs(pktout, attrs);
sftp_send(pktout);
pktin = sftp_recv();
if (!pktin) {
fxp_internal_error("did not receive a valid SFTP packet\n");
return 0;
}
id = sftp_pkt_getuint32(pktin);
if (id != 0x678) {
fxp_internal_error("request ID mismatch\n");
return 0;
}
id = fxp_got_status(pktin);
if (id != 1) {
|
| ︙ | | |
681
682
683
684
685
686
687
688
689
690
691
692
693
694
|
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
|
+
+
+
+
|
pktout = sftp_pkt_init(SSH_FXP_FSETSTAT);
sftp_pkt_adduint32(pktout, 0x678); /* request id */
sftp_pkt_addstring_start(pktout);
sftp_pkt_addstring_data(pktout, handle->hstring, handle->hlen);
sftp_pkt_addattrs(pktout, attrs);
sftp_send(pktout);
pktin = sftp_recv();
if (!pktin) {
fxp_internal_error("did not receive a valid SFTP packet\n");
return 0;
}
id = sftp_pkt_getuint32(pktin);
if (id != 0x678) {
fxp_internal_error("request ID mismatch\n");
return 0;
}
id = fxp_got_status(pktin);
if (id != 1) {
|
| ︙ | | |
713
714
715
716
717
718
719
720
721
722
723
724
725
726
|
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
|
+
+
+
+
|
sftp_pkt_adduint32(pktout, 0xBCD); /* request id */
sftp_pkt_addstring_start(pktout);
sftp_pkt_addstring_data(pktout, handle->hstring, handle->hlen);
sftp_pkt_adduint64(pktout, offset);
sftp_pkt_adduint32(pktout, len);
sftp_send(pktout);
pktin = sftp_recv();
if (!pktin) {
fxp_internal_error("did not receive a valid SFTP packet\n");
return -1;
}
id = sftp_pkt_getuint32(pktin);
if (id != 0xBCD) {
fxp_internal_error("request ID mismatch");
return -1;
}
if (pktin->type == SSH_FXP_DATA) {
char *str;
|
| ︙ | | |
752
753
754
755
756
757
758
759
760
761
762
763
764
765
|
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
|
+
+
+
+
|
pktout = sftp_pkt_init(SSH_FXP_READDIR);
sftp_pkt_adduint32(pktout, 0xABC); /* request id */
sftp_pkt_addstring_start(pktout);
sftp_pkt_addstring_data(pktout, handle->hstring, handle->hlen);
sftp_send(pktout);
pktin = sftp_recv();
if (!pktin) {
fxp_internal_error("did not receive a valid SFTP packet\n");
return NULL;
}
id = sftp_pkt_getuint32(pktin);
if (id != 0xABC) {
fxp_internal_error("request ID mismatch\n");
return NULL;
}
if (pktin->type == SSH_FXP_NAME) {
struct fxp_names *ret;
|
| ︙ | | |
797
798
799
800
801
802
803
804
805
806
807
808
809
810
|
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
|
+
+
+
+
|
sftp_pkt_addstring_start(pktout);
sftp_pkt_addstring_data(pktout, handle->hstring, handle->hlen);
sftp_pkt_adduint64(pktout, offset);
sftp_pkt_addstring_start(pktout);
sftp_pkt_addstring_data(pktout, buffer, len);
sftp_send(pktout);
pktin = sftp_recv();
if (!pktin) {
fxp_internal_error("did not receive a valid SFTP packet\n");
return 0;
}
id = sftp_pkt_getuint32(pktin);
if (id != 0xDCB) {
fxp_internal_error("request ID mismatch\n");
return 0;
}
fxp_got_status(pktin);
return fxp_errtype == SSH_FX_OK;
|
| ︙ | | |